为啥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中没有整数,只有number
s。此外,在计算数字时,除 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()函数为啥不能精确小数点位数,