32-битное число с плавающей запятой имеет только 7 значащих цифр. Это нормально для числа с плавающей запятой, которое должно быть сохранено как ближайшая возможная аппроксимация определенного числа.
32-битное число с плавающей запятой просто не может сохранить значение 1.1
точно, ближайшим значением, которое он может хранить, является 1.100000023841858
.
Для семи значащих цифр число по-прежнему является точным, то есть 1.100000
.
Обычно, когда отображается число с плавающей запятой, оно округляется в соответствии с количеством значимых цифр, которые он может точно хранить. То, что вы используете для отображения чисел, очевидно, не делает этого округления, поэтому вы видите ограничения в точности чисел.
Если предположить, что эти 32-битные поплавки с использованием стандарта IIIE 754, они могут представлять значения в диапазоне от 1,18 * 10 -38 до 3,4 * 10 38 .
Возможный дубликат [понимания переменных с плавающей запятой] (http://stackoverflow.com/questions/2480699/understanding-floating-point-variables) –
@muistooshort Я действительно знал ответ на этот вопрос раньше, хотя я вижу, что они очень похожи. Моя путаница возникла из-за того, что мне было трудно понять, почему 32-битный float не смог правильно сохранить номер, в то время как javascript вообще отлично работает. (Я забыл упомянуть, что «Float64Array», похоже, справляется с этими номерами, по крайней мере, в Chrome). – benekastah