11

当我添加两个文本框值1.0010.001然后我做一个parseFloat我得到1.0019999999。我想要它1.002。你能帮助我吗?

4

5 回答 5

27

Javascript Number类有一个toFixed()函数可以让你得到你想要的。

所以你可以这样做parseFloat("1.0019999").toFixed(3),这会给你1.002

参数(本例中为 3)是小数点后显示的位数

于 2008-10-06T12:15:39.870 回答
10

0.002 不能准确地表示为以 2 为底的数字。类似于 1/3 不能以 10 为底表示的方式。

1/3 = 0.33333... 重复出现。要以 10 为基数准确表示数字,您需要无限多的十进制数字。

0.002 是一个可以精确地以 10 为底的数字(正如我们在此处看到的),但不能以计算机使用的以 2 为底。为了准确地表示这个数字,需要无限个二进制数字。

于 2008-10-06T11:21:21.790 回答
6

这是一个已知问题:参见准确度问题 和准确度问题的最小化:最小化

于 2008-10-06T11:09:46.023 回答
6

javascript 方法Number.toFixed()Number.toPrecision()可以在这里提供帮助,但它们返回一个String. 一个可能的解决方案如下:

var x = parseFloat(parseFloat("1.0019999999").toPrecision(3));
于 2012-07-09T17:16:00.353 回答
0

如果你想快速修复,你可以四舍五入到最接近的千分之一

数学.round((1.001+0.001)*1000)/1000

于 2008-10-06T11:23:45.013 回答