2017-07-13 2 views
0

PHPWy PHP est meilleur que Javascript en Arithmétique virgule flottante?

<?php echo (-9.341+2.111); 

Résultat -7,23

Javascript

console.log(2.111-9.341) 

Résultat -7,229999999999999

Je suis au courant de flotter Arithmétique, mais pourquoi donner PHP à la vanille réponse exacte et Javascript (testé sur la console Google Chrome) non?

+0

Vous trouverez beaucoup d'endroits où PHP vous donne les numéros qui se répètent aussi. – ceejayoz

+0

http://stackoverflow.com/questions/588004/is-floating-point-math-broken – rtfm

+0

Les deux [JavaScript] (https://www.ecma-international.org/ecma-262/5.1/#sec-4.3 .19) et [PHP] (http://php.net/manual/fr/language.types.float.php) utilisent IEEE 754, l'écho est probablement arrondi (notez si un point flottant PHP est 32b ou 64b dépend de la plateforme –

Répondre

1

Il est php de echo qui est arrondi:

var_dump(sprintf('%.20f', -9.341+2.111)); // string(23) "-7.22999999999999864997" 

En php sources il semble que echo pourrait convertir un nombre à virgule flottante à une chaîne en utilisant la conversion suivante:

str = zend_strpprintf(0, "%.*G", (int) EG(precision), dval); 

Ce qui signifie essentiellement non notation scientifique ou %f (voir precision directive de configuration, 14 par défaut).

+0

Donc c'est l'écho qui arrondit par défaut? Mais pourquoi si je fais var_dump (sprintf ('% f', -9.341 + 2.111)) j'ai "-7.230000". Que dit PHP pour arrondir à la deuxième décimale? –

+0

"J'ai eu' -7.230000'. " --- et qu'espériez-vous obtenir? – zerkms

+0

ok donc sprintf arrondi à 6 décimales par défaut et écho à 15 digitistes significatifs à droite? –