2011-05-26 72 views
4

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

例如,如果我想知道当一些x是被3整除,是好写

x % 3 == 0 

或做我需要做的浮点式的比较如:

x % 3 <= 0.5 

任何洞察力将不胜感激。

(如果我需要做的不平等存在,有关检查如果传递函数参数等于1是什么,我可以写x === 1或不呢?)

+1

模数算术不只是在整数上工作 - 4.5%.5返回0,如同.6%.3。 – kennebec 2011-05-27 04:24:39

回答

1

如果x是一个整数,你可以先写模数。

只有当你想失败,比如说一个字符串“1”或布尔值为true,但是传递一个整数1时,才需要'===';否则'=='应该就足够了。

+0

在大多数编程语言中,“1”== 1返回false; JavaScript也是这样做的。 – 2011-05-27 01:09:40

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 

工作正常。

+0

谢谢。你有这样的来源吗? – 2011-05-27 01:09:12

+0

@Ben Alpert:事实。试试这个:'1.265 * 100000';它给出'126499.99999999999',你必须向上或向下取整才能得到正确的结果。 – Ryan 2011-05-27 01:52:09

+0

对不起,我的意思是int类型的“通常安全”的来源。 – 2011-05-27 02:24:43

0

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

+0

你有一个源代表它有它们的概念吗? – 2011-05-27 01:10:01

+0

parseInt和parseFloat函数的存在,主要是=) – 2011-05-27 17:07:01

+0

是的,但'parseInt'只是给你一个恰好等于一个整数的浮点数。它们不是独立的数据类型。 – dan04 2011-05-29 09:14:57

相关问题