Page 1 sur 1

Fonction number_format() limitée ?

Posté : 29 avr. 2014, 12:29
par Inygo
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.

Re: Fonction number_format() limitée ?

Posté : 29 avr. 2014, 14:34
par xTG
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

Re: Fonction number_format() limitée ?

Posté : 29 avr. 2014, 17:09
par Inygo
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.