2014-04-18 5 views
0

Я хочу, чтобы округлить до двух знаков после запятой поэтому, естественно, я хотел бы использовать:Math.round неприятность

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

Но я в конечном итоге получить очень длинные выходные, с большим количеством знаков после запятой. Так что я пробовал разные входы для Math.round() похож на те, которые я должен использовать и обнаружил, что

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

ли это имеет смысл для кого?

+0

Вся техника недействительна. Значения с плавающей запятой не имеют десятичных знаков. У них есть бинарные места, которые несоизмеримы с десятичными знаками, поэтому вы не можете округлить их до определенного числа десятичных знаков. См. [Здесь] (http://stackoverflow.com/a/12684082/207421) для доказательства. – EJP

ответ

2

Ваш код кажется правильным

Math.round (8.3391700279483738E17) = 833917002794837376

имеет смысл как 8.3391700279483738E17 математически означает 8.3391700279483738 * 10^17 или

8339170027948373800, а не десятичное число , Небольшая предельная разница обусловлена ​​ошибкой Delta.

Смежные вопросы