Функция ParseFloat в JavaScript - PullRequest
12 голосов
/ 06 октября 2008

Когда я добавляю два значения текстового поля 1.001 и 0.001 , а затем я получаю parseFloat, я получаю 1.0019999999 . Я хочу это 1,002 . Вы можете мне помочь?

Ответы [ 5 ]

26 голосов
/ 06 октября 2008

Класс Javascript Number имеет функцию toFixed(), которая даст вам то, что вы хотите.

Так что вы можете сделать parseFloat("1.0019999").toFixed(3), и это даст вам 1,002 .

Параметр (в данном случае 3) - это количество цифр, отображаемых после десятичной точки

10 голосов
/ 06 октября 2008

0,002 нельзя точно представить как число 2 основания. Подобно тому, как 1/3 не может быть представлена ​​в базе 10.

1/3 = 0,33333 ... рекурсия. Для точного представления числа в базе 10 вам понадобится бесконечное количество десятичных цифр.

0,002 - это число, которое может быть точно представлено в базе 10 (как мы видим здесь), но не в базе 2, как используется компьютерами. Чтобы точно представить это число, потребуется бесконечное количество двоичных цифр.

6 голосов
/ 09 июля 2012

Здесь могут помочь методы javascript Number.toFixed() и Number.toPrecision(), но они возвращают String. Возможное решение заключается в следующем:

var x = parseFloat(parseFloat("1.0019999999").toPrecision(3));
6 голосов
/ 06 октября 2008

Это известная проблема: см. проблема точности и минимизация проблемы точности: минимизация

0 голосов
/ 06 октября 2008

Если вы хотите быстро исправить, вы можете округлить до ближайшей тысячной

* * Math.round тысяча два ((1,001 + 0,001) * 1000) / 1000
...