2008-10-06 2 views
10

Когда я добавляю два значения текстового поля, которые составляют 1.001 и 0.001, а затем я делаю parseFloat, я получаю 1.0019999999. Я хочу его 1.002. Вы можете мне помочь?Функция ParseFloat в JavaScript

ответ

10

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

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

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

1

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

Math.round ((1,001 + 0,001) * 1000)/1000

23

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

Итак, вы можете сделать parseFloat («1.0019999»). ToFixed (3), и это даст вам «1.002».

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

+0

Спасибо, 17 из 26. Я не знал о функции toFixed(). – pmg 2008-10-06 12:32:35

4

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

var x = parseFloat(parseFloat("1.0019999999").toPrecision(3)); 
Смежные вопросы