Когда я добавляю два значения текстового поля: 1.001 и 0.001, а затем я делаю parseFloat
, я получаю 1.0019999999. Я хочу его 1.002. Можете ли вы мне помочь?
Функция ParseFloat в JavaScript
Ответ 1
Javascript Number класс имеет функцию toFixed(), которая поможет вам получить то, что вы хотите.
Итак, вы можете сделать parseFloat ( "1.0019999" ). toFixed (3), и это даст вам "1.002".
Параметр (3 в этом случае) - это число цифр, которое должно отображаться после десятичной точки
Ответ 2
0.002 не может быть точно представлено как базовое число 2. Подобно тому, как 1/3 не может быть представлен в базе 10.
1/3 = 0.33333.... Чтобы точно представить число в базе 10, вам понадобится бесконечное число десятичных цифр.
0.002 - это число, которое может быть точно представлено в базе 10 (как мы видим здесь), но не в базе 2, как используется компьютерами. Чтобы точно представлять это число, потребовалось бы бесконечное число двоичных цифр.
Ответ 3
Это известная проблема: см. точная проблема и минимизация проблемы точности: минимизация
Ответ 4
Здесь могут помочь методы javascript Number.toFixed()
и Number.toPrecision()
, но они возвращают String
. Возможное решение:
var x = parseFloat(parseFloat("1.0019999999").toPrecision(3));
Ответ 5
Если вы хотите быстро исправить, вы можете округлить до ближайшей тысячной
Math.round((1,001 + 0,001) * 1000)/1000