2015-06-12 2 views
0

Когда я бегу:если 0,1 не имеет двоичное представление, почему я получаю 0,1

System.out.println(1f - 0.9f); 

я получаю:

0.100000024 

Это потому, что 0,1 не имеет представления в двоичной системе.

Тогда почему, когда я печатаю это:

System.out.println(0.1f); 

я получаю это:

0.1 
+4

'1f-0.9f! = 0.1f' – ZhongYu

+0

Когда вы печатаете, результат« закруглен »- 0,1 не является 0,1 ... – assylias

ответ

4

0,1 можно представить лучше с плавающей точкой, чем 0,9. Понятно, что это потому, что 0.1 меньше и ближе к ближайшему диадическому рациональному.

Таким образом, ошибка при вычитании из 1.0 больше.

Следовательно, эти два значения отличаются.

Встроенные эвристики форматирования в Println сделать лучшую работу с 0,1

0

System.out.println, и большинство методов преобразования чисел с плавающей запятой в строки, работает, используя следующее правило: они используют именно так, как необходимы много цифр так что значение true значение double - ближайший представимый номер к печатный значение.

То есть, он только печатает цифры от 0.1 потому, что истинное значение double, 0.1000000000000000055511151231257827021181583404541015625, ближе double к отображаемому значению.

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