Javascript Float32Array怪异

时间:2011-12-17 03:48:04

标签: javascript floating-point strongly-typed-dataset

如果我运行此代码:

var a = new Float32Array(3);
a[0] = 1;
a[1] = 1.1;
a[2] = 1.00001;

我得到a的结果:

[1, 1.100000023841858, 1.0000100135803223]

为什么Float32Array与我的号码一样?另外,我怎么知道哪些数字可以准确地表示为32位浮点数?

1 个答案:

答案 0 :(得分:3)

32位浮点数只有7位有效数字。将浮点数存储为特定数字的最接近可能近似值是正常的。

32位浮点数无法准确存储值1.1,它可以存储的最接近的值是1.100000023841858

对于七位有效数字,该数字仍然准确,即1.100000

通常,当显示浮点数时,它会根据可以准确存储的有效位数进行舍入。您使用什么来显示数字显然不会进行此舍入,这就是为什么您看到数字精度的限制。

假设这些32位浮点数使用IIIE 754标准,它们可以表示从1.18 * 10 -38 到3.4 * 10 38