2014-04-18 3 views
0

Je veux arrondir à deux chiffres après la virgule si naturellement j'utiliser:Math.round trouble

Double number = Math.round(number*100.0)/100.0 

Mais je fini par obtenir des sorties très long, avec beaucoup de chiffres après la virgule. J'ai donc essayé différentes entrées pour Math.round() semblables à ceux que je dois utiliser et a constaté que

Math.round(8.3391700279483738E17) = 833917002794837376 
Math.round(8.3391700279483738E17 * 100)/100.0 = 9.223372036854776E16 

-t-il un sens à tout le monde?

+0

La technique entière est invalide. Les valeurs à virgule flottante n'ont pas de décimales. Ils ont des emplacements binaires, qui sont incommensurables avec des décimales, de sorte que vous ne pouvez pas les arrondir à un nombre spécifique de décimales. Voir [ici] (http://stackoverflow.com/a/12684082/207421) pour preuve. – EJP

Répondre

2

Votre code semble être correct

Math.round (8.3391700279483738E17) = 833917002794837376

est logique que 8.3391700279483738E17 signifie mathématiquement 8,3391700279483738 * 10^17 ou

8339170027948373800 et non un nombre décimal . La petite différence marginale est due à l'erreur Delta.