在 JavaScript 中有没有一种方法可以确定一个数除以另一个数是否会得到整数?就像 18.4/0.002
给我们 9200
,但是 18.4/0.1
给我们 183.99999999999997
。问题在于它们都可能是任何 float (如 0.1、0.01、1、10 等),这使得无法使用标准函数模或尝试减法,而浮点精度问题意味着我们有时会为本应为整数的数字获取非整数结果,或为不应为整数的数字获取整数结果。
最佳答案
一个hacky的方法是
- 使用
toString()
将两个数字转换为字符串 - 通过剥离
.
(包括.
)之前的字符并取剩余部分的长度来计算精度点数(N) - 乘以 10^N 使它们成为整数
- 取模并得到结果
更新的演示:http://jsfiddle.net/9HLxe/1/
function isDivisible(u, d) {
var numD = Math.max(u.toString().replace(/^\d+\./, '').length,
d.toString().replace(/^\d+\./, '').length);
u = Math.round(u * Math.pow(10, numD));
d = Math.round(d * Math.pow(10, numD));
return (u % d) === 0;
}
关于划分时的 Javascript 精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24979513/