Bonjour à tous,
voilà le petit problème que j'ai trouvé :)
Les zéros ont disparus ! Pour moi le calcul est donc faux ! quelqu'un à t il une idée merci :)Code:echo number_format(1124000727777607680000 * 5); // == 5,620,003,638,888,038,924,288 ??
Version imprimable
Bonjour à tous,
voilà le petit problème que j'ai trouvé :)
Les zéros ont disparus ! Pour moi le calcul est donc faux ! quelqu'un à t il une idée merci :)Code:echo number_format(1124000727777607680000 * 5); // == 5,620,003,638,888,038,924,288 ??
:koi: effectivement ce qui s'affiche n'est pas exactement logique.
As-tu essayé en 2 lignes ? et d'afficher le résultat du calcul par un var_dump de base ?
Code:
1
2
3 $total = 1124000727777607680000 * 5; echo number_format($total)."<br>"; var_dump($total);
Le problème est la récupèration d'une valeur sans les exposants et si possible juste :-)
Je présente l'idée :
Afin de ne pas avoir un résultat de la forme 1634.5478E+18
Je fais à peu près
Le problème est l'erreur rencontrée. ;)Code:
1
2 $resultat = implode (explode (',' , number_format($x*$y)));
Ton nombre dépasse la limite d'un entier en 64 bits.
Tu peux utiliser les fonctions BC :
Code:echo bcmul('1124000727777607680000','5');
Bonjour,
En plus d'utiliser la fonction proposée par sabotage, qui te permet la manipulation de grands nombres, tu peux créer facilement ta propre fonction de formattage :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function formatBigNumber($nb) { $pos = strlen($nb); $fmt = ''; while ($pos > 3) { $pos -= 3; $fmt = ','.substr($nb, $pos, 3).$fmt; } return substr($nb, 0, $pos).$fmt; } echo formatBigNumber(bcmul("1124000727777607680001", "21555467518")); //24,228,361,177,818,582,674,008,893,707,518
Voilà j'ai pus tester, çà fonctionne ! j'utilise les commandes 'bc' plutôt que ce que j'ai développé finalement ... pour pas perdre de temps :)