我正在验证它应该只允许整数,我有这样的事情:
let value = '32230.13';
if(!!Number.isInteger(+value.replace(/[^0-9\.]/g, ''))) {
// stuff
}
绝对不是最漂亮的方法,但它对我们来说很好用,直到我们得到以 .0
结尾的值。所以我注意到以 .0
结尾的值被认为是整数。例如:
console.log(Number.isInteger(100.0)) // expected `false` got `true`
console.log(Number.isInteger(100.00)) // expected `false` got `true`
所以我开始研究一些关于整数的问题,我找到了这个答案 https://stackoverflow.com/a/56393941/7602110,但它让我认为这是我们在使用 Javascript (WTFJS) 时必须处理的一些奇怪的 JavaScript 问题.我什至找到了类似的 https://github.com/denysdovhan/wtfjs,甚至去尝试用不同的编程语言做同样的事情,我得到了预期的结果 100.0
不是整数,但我仍然有一些问题:
100.0 是整数吗?
Number.isInteger
) 是否错误?
我该怎么做才能真正忽略被视为整数的 .00
值。
答案 0 :(得分:2)
Javascript 标准实际上非常清楚“数学值”和以语言 (https://262.ecma-international.org/11.0/#sec-mathematical-operations) 表示的 Numbers
之间的区别
从数学的角度来看,100.0
绝对是一个整数。从 JS 的角度来看,isInteger(100.0)
是 true
,因为 isInteger
被定义为为 true
返回 Numbers
,其数学值为整数。
您的不确定性来自于在其他一些语言中,100
和 100.0
确实是完全不同的东西,具有不同的存储机制和对它们执行的操作的性质。在 Javascript 中,我们实际上不知道特定数字是如何存储的,也无法控制它。标准规定所有 Numbers
都应该表现得好像它们都是 IEEE 754-2019 双精度值,但是当您计算 1+2
时特定引擎实际执行的操作序列以及它们与 {{ 有何不同1}} 取决于该引擎。