В Java значения с плавающей точкой выражаются в единицах степени двух. Для чисел от 2 до 4 единица, используемая для float
, равна 2 -22 . Это потому, что float
имеет 24-битные значения, поэтому, когда старший бит представляет 2 1 , как это должно быть для чисел между 2 и 4, младший бит представляет 2 1-23 = 2 -22 .
2 -22 равно 0,0000002384185791015625, поэтому представляемые числа между 2 и 4 разнесены с шагом в такой размер. Представляемый номер рядом 2.3211232 является:
1016 +2,3211228847503662109375 1019 * 2,3211231231689453125000 1021 * +2,3211233615875244140625 1023
Из тех, +2,3211231231689453125000 расположено ближе всего к 2.3211232,Таким образом, когда исходный текст 2.3211232f
преобразуется в float
, результат равен 2.3211231231689453125000.
Форматирование по умолчанию в Java отображает его как «2.3211231», поскольку оно использует только достаточно десятичных цифр для однозначной идентификации значения. Он не показывает все цифры точного значения, поэтому он искажает значение. Никогда не воспринимайте результат форматирования по умолчанию как фактическое значение.