(10-03-2011, 12:44 AM)oxman a écrit : Ca n'est pas sa demande, il dit qu'il ne veut pas de notation scientifique lorsqu'il fait le résultat d'une division très petite mais qu'il veut juste la valeur comme nous on l'écrirait. Et ma solution marche très bien pour ce cas.
En quoi est-ce différent ?
$a = 125/12354874646520864284284624684;
echo $a . "\n"; // 1.0117464043652E-26
echo sprintf('%.' . (strlen($a)+1) . 'f', $a) . "\n"; // 0.00000000000000000000
echo floatToString($a) . "\n"; // 0.0000000000000000000000000101174640436518
echo afficher_decimal($a) . "\n"; // 0.00000000000000000000000001011746404365179
echo floatalize($a) . "\n"; // 0.000000000000000000000000010117464043652
(10-03-2011, 10:06 AM)Argorate a écrit : en fait, j'avais pensais à cette solution (strlen), et je l'avais même testé, mais j'avais abandonné quand j'avais vu que le strlen() renvoi un peu n'importe quoi. Mais à la reflection, c'est peut etre lié a cette histoire de limite technique?
Tu n'as toujours rien compris, elle renvoi parfaitement le bon résultat par rapport à la précision de php, soit 14 chiffres après la virgule dans un nombre (en général).
En gros la notation scientifique permet de garder une plus grande précision pour le même nombre de chiffres après la virgule.
Exemple :
$a = 0.0000000000000000000176827115406041111;
ini_set('precision', 14);
echo $a; // 1.7682711540604E-20
echo strlen($a); // 19
echo sprintf('%.' . (strlen($a)+1) . 'f', $a); // 0.00000000000000000002
echo floatalize($a) . "\n"; // 0.000000000000000000017682711540604
ini_set('precision', 20);
echo $a; // 1.7682711540604110611E-20
echo strlen($a); // 25
echo sprintf('%.' . (strlen($a)+1) . 'f', $a); // 0.00000000000000000001768271
echo floatalize($a) . "\n"; // 0.000000000000000000017682711540604110611