2013-12-09 5 views
3

Не могли бы вы объяснить, почему я получил следующий результат:число с плавающей точкой представление, Java пример

, когда я запускаю это:

System.out.println((0.2 - 0.1)); 

я получил: 0,1

, когда я запускаю это:

System.out.println((0.3 - 0.2)); 

я получил: 0,09999999999999998

Я знаю, что число «0,1» не имеет конечного представления в двоичном формате, но оно не объясняет вышеприведенные результаты. Скорее всего, речь идет не о конкретном языке, а о том, как цифры хранятся на компьютере.

+4

[Обязательная ссылка] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). –

+2

Убрано «иррациональное» из названия, так как термин «иррациональное число» имеет определенное значение, которое не имеет никакого отношения к вопросу. – Ingo

ответ

1

Java использует IEEE floating point для представления double значений. Это не точное представление, и некоторые вычисления приводят к крошечным ошибкам, которые проявляются таким образом.

0

Я согласен с артистическим выше (float и double не является точным), так что вы получите странности как этого

но есть решение вашей проблемы:

NumberFormat nf = NumberFormat.getInstance(); 
nf.setMaximumFractionDigits(1); 
nf.format(0.3f - 0.2f); 

Это произведет 0.1.

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