Fonction number_format() limitée ?

Inygo
Invité n'ayant pas de compte PHPfrance

29 avr. 2014, 12:29

Bonjour,

Je galère depuis quelques heures sur des scripts, et je viens de m'apercevoir que le soucis que je rencontre est lié à l'utilisation de la fonction number_format().

http://www.php.net/manual/fr/function.number-format.php

Mettons, deux nombres. L'un à 16 chiffres, l'autre à 17.
<?php
$number1 = 6666666666666666 ;
$number2 = 66666666666666666 ;
?>
<?php
echo "nb1 : ".$number1 ;
echo "nb2 : ".$number2 ;
?>
M'affiche ceci :
nb1 : 6.6666666666667E+15
nb2 : 6.6666666666667E+16
Jusque là, on est bons. Maintenant, je veux afficher les nombres bruts, sans puissance, sans séparateur de milliers, rien.
Je tente avec number_format() :
<?php
echo "nb1 : ".number_format($number1, 0, ".", "") ; 
echo "nb2 : ".number_format($number2, 0, ".", "") ; 
?>
Et là j'ai ceci :
nb1 : 6666666666666666
nb2 : 66666666666666664
Le second nombre n'est pas celui que j'attendais.

Est-ce que quelqu'un peut m'expliquer si j'atteins les limites de la fonction, ou bien si je m'y prends comme un pied ?

Merci beaucoup.
Iny.

ViPHP
xTG
ViPHP | 7331 Messages

29 avr. 2014, 14:34

Tu atteins surtout la limite de stockage.
Un int32 = 4 294 967 295 max (VS 66 666 666 666 666 666)
Je ne serai pas étonné que niveau mémoire PHP fasse des approximations pour stocker tout ça.

Tu peux sinon regarder du côté des librairies faites pour les grand nombres telle que GMP.
Il y a moyen de convertir une ressource GMP (un grand nombre) en string : http://www.php.net/manual/en/function.gmp-strval.php

Inygo
Invité n'ayant pas de compte PHPfrance

29 avr. 2014, 17:09

Merci bien xTG pour cette réponse.

J'ai utilisé les fonctions GMP, ça marche du tonnerre.

Merci pour ta réactivité (et efficacité !)

Iny.