我什么时候需要担心JavaScript中的浮点错误?

时间:2011-05-26 23:25:36

标签: javascript floating-point

JavaScript对于整数和浮点数没有不同的类型。使用“整数”时,这是否意味着我需要担心舍入错误?

例如,如果我想知道数字x何时可被3整除,是否可以写

x % 3 == 0

还是我需要进行浮点式比较,例如:

x % 3 <= 0.5

任何见解都将受到赞赏。

(如果我确实需要在那里做不等式,那么检查一个函数的传递参数是否等于1;我可以写x === 1吗?)

3 个答案:

答案 0 :(得分:4)

如果您正在使用整数,通常是安全的。但是,一些浮点运算可能会非常奇怪。如果在使用模数之前对数字执行浮点运算,即使逻辑结果始终为整数,也应使用:

Math.floor(x) % 3 === 0

但如果它总是一个整数,就像这样:

var x = 52;
if(x % 3 === 0) { // safe
}

然后那很好。关于您的第二个问题,===身份运算符在数字之间也可以安全使用。例如:

function x(y) {
    return y === 7;
}

alert(x(7.0)); // true

正常工作。

答案 1 :(得分:1)

如果x是整数,则可以先写入模数。

只有当你想要失败时才需要

和'===',例如,字符串“1”或布尔值为true,但传递整数1;否则'=='就足够了。

答案 2 :(得分:0)

JavaScript不会为int和float提供不同的类型,但确实有它们的概念。内置函数parseInt可用于强制数字(或任何其他类似数字的值,包括字符串“32.06”!)为整数。它会截断而不是舍入浮点值。