为啥javascript接受小数作为整数

Posted

技术标签:

【中文标题】为啥javascript接受小数作为整数【英文标题】:Why does javascript accept a decimal as an integer为什么javascript接受小数作为整数 【发布时间】:2015-10-16 10:44:50 【问题描述】:

我有这个 html

<input type='number' id='length' step='0.1' min='0'; max='5'>Length

还有这个 javascript

num=document.getElementById('length').value;
if(num==1 || 2 || 3 || 4|| 5)
num='0'+num;

我的问题是:虽然我只希望括号内的代码在输入的数字是整数时执行,但如果它检测到 0.8 或其他小数,它也会激活。任何想法为什么?我如何解决它?谢谢。

【问题讨论】:

javascript中没有整数,只有numbers。此外,在计算数字时,除 0 之外的所有值都等于 true 所以 || 2 等于 true 你的if 逻辑坏了。 除非你只想要那些特定的整数,否则使用这样的东西,而不是长的if:***.com/questions/3885817/… num==1 || 2 || 3 || 4|| 5 实际上意味着(num==1) || (2) || (3) || (4) || (5),因此您的代码将始终评估为真 if 语句与 jQuery 无关。这是基本的 JavaScript。 【参考方案1】:

要确保num 是一个整数,而不必定义所有可能性,请使用:

if (num % 1 == 0)

【讨论】:

感谢您的帮助。我犯了一个愚蠢的错误。 JS有点生疏。我会在早上接受,现在不能造成时间限制。谢谢!【参考方案2】:

为什么:

num==1 || 2 || 3 || 4|| 5

等于:

(num==1) || 2 || 3 || 4|| 5

所以如果num"1"(总是字符串类型),则表达式返回true,否则返回2(也是一个真实 值),最终你的if 语句总是成功。

如何解决:

// implicitly converts the string type into number type before comparison
// returns true if it is an integer-like string
num == Math.floor(num) 

所以你可以这样做:

if (num == Math.floor(num) && num > 0 && num < 6) 
    // an integer-like string that meets the requirement [1, 5]

但请记住,num 现在仍然是 string 类型。如果您想要number,请执行以下操作:

num = +num

【讨论】:

【参考方案3】:

你应该这样做

if (num == 1 || num == 2 || num == 3 || num == 4 || num == 5)

错误 - 否则它将 2 与 2 进行比较,并认为最后 4 个“if”参数为真。

CORRECTO - JS 中的任何数字都被认为是真的。

【讨论】:

“比较 2 和 2”?任何不是 0 的数字都被认为是 JavaScript 中的真值。 (我没有*投票) 是的,@Vohuman 说的是实际发生的事情。不,我做了投票。为何代码不起作用的解释是在传播错误信息。 这是正确的比较方法,但它并不能解决 OP 的问题,因为它只检查 5 个整数,但还有很多很多其他整数 @LưuVĩnhPhúc 它确实解决了它,因为我只需要检查一些。如果您没有注意到,输入表单的最大值为 5,因此我只需要检查整数 1-5。给他投票。【参考方案4】:

您必须编辑“If”循环:

if (num == 1 || num == 2 || num == 3 || num == 4 || num == 5)

【讨论】:

以上是关于为啥javascript接受小数作为整数的主要内容,如果未能解决你的问题,请参考以下文章

javascript的Math.round()函数为啥不能精确小数点位数,

为啥javascript小数相减会出现一长串的小数位数?

java做除法运算,为啥除不开时也会得到整数呢

118-接受用户输入的字符串,整数和小数

excel2007除法结果为啥只有整数,怎样才能保留两位小数?

java float double精度为啥会丢失