2014-11-24 2 views
-1

Привет Я новичок в программировании на Java, и у меня возникают проблемы с удвоениями. Я пытаюсь вычесть .2 из 4.6, но вместо получения 4.4 я получаю 4.3999999999999995. Я знаю, что Decimals не может быть представлен точно в двоичном формате, но есть ли какой-либо путь вокруг этой проблемы. Любой совет будет принят во внимание.Java double rounding

+3

Научитесь использовать класс 'BigDecimal' вместо' double'. –

+2

Или используйте 'DecimalFormat' для вывода вывода или' printf(). ' – EJP

+0

Для быстрого исправления вместо этого вы можете использовать' float': 'System.out.println (4.6F-0.2F);', но попробуйте познакомиться с «BigDecimal», так как это лучший выбор. – Tom

ответ

1

Если вы используете класс BigDecimal вместо double, вы не получите эту неточность. Обратите внимание, что при создании BigDecimal лучше всего передать значение как String, так что никогда не будет округления.

BigDecimal first = new BigDecimal("4.6"); 
BigDecimal second = new BigDecimal("0.2"); 
System.out.println(first.subtract(second)); 
1

Вы можете использовать BigDecimal или вы можете использовать форматированный вывод, как

System.out.printf("%.2f%n", 4.6 - 0.2); 

выход является

4.40 

Или, используя BigDecimal

BigDecimal bd = BigDecimal.valueOf(4.6); 
System.out.println(bd.subtract(BigDecimal.valueOf(0.2))); 

Выход

4.4