2014-10-29 4 views
-1

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

System.out.println(4.4f == 4.4); 

Это печатает ложное время,

System.out.println(4.5f == 4.5); 

печать верно.

Может ли кто-то пролить свет на то, почему это так в JAVA?

+2

Это не относится к Java. Это касается чисел с плавающей запятой. – DwB

+1

Этот вопрос задается дважды в неделю, в той или иной форме. Подсказка: есть бесконечность десятичных значений, но только 2^32 значения поплавка и 2^64 двойных значения. –

ответ

5

Когда вы пишете 4.4f, в результате чего самое близкое значение представляется как float к истинному значению 4.4.

Когда вы пишете 4.4, что приводит к наименьшему значению, представляемому как double, к значению 4.4.

Когда вы пишете 4.4f == 4.4, что тесты, если ближайшее значение представимо как float еще ближе значение представимо как double до 4,4, что является ложным; double имеет большую точность, и ни float, ни double могут представлять 4.4 точно.

Оба float и doubleмогут представляют собой 4,5 в точности; поскольку они используют двоичные дроби, а 4.5 - точная двоичная дробь, которая отлично работает.

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