We hebben een probleem met het vergelijken van floats in PHP. Even een dummy-voorbeeld:
Dit is een bekend probleem: het vergelijken van floats is onbetrouwbaar http://php.net/manual/en/language.types.float.php. De aldaar genoemde 'epsilon'-methode kunnen we niet gebruiken:
omdat betreffende code de precisie niet kan weten. Wat ons echter opviel is dat de 'string-versie' van de floats gelijk zijn. In het dummy-voorbeeld: "14.5".
Some 'dude from the internet' raadt dit ook aan op StackOverflow (https://stackoverflow.com...ts-in-php#answer-26799533).
Is dit nu een goede oplossing (het voelt hackish), of gaat dit false negatives/positives opleveren? Er even van uitgaand dat we de precisie van de float dus niet (kunnen) weten.
PHP:
1
2
3
4
| $float_a = 58/4; $float_b = 116/8; $float_a === $float_b; // zou TRUE moeten zijn, is FALSE |
Dit is een bekend probleem: het vergelijken van floats is onbetrouwbaar http://php.net/manual/en/language.types.float.php. De aldaar genoemde 'epsilon'-methode kunnen we niet gebruiken:
PHP:
1
| ($float_a-$float_b) < 0.001; // TRUE |
omdat betreffende code de precisie niet kan weten. Wat ons echter opviel is dat de 'string-versie' van de floats gelijk zijn. In het dummy-voorbeeld: "14.5".
PHP:
1
| (string) $float_a === (string) $float_b; // TRUE |
Some 'dude from the internet' raadt dit ook aan op StackOverflow (https://stackoverflow.com...ts-in-php#answer-26799533).
Is dit nu een goede oplossing (het voelt hackish), of gaat dit false negatives/positives opleveren? Er even van uitgaand dat we de precisie van de float dus niet (kunnen) weten.