划分时的 Javascript 精度

标签 javascript floating-point

在 JavaScript 中有没有一种方法可以确定一个数除以另一个数是否会得到整数?就像 18.4/0.002 给我们 9200,但是 18.4/0.1 给我们 183.99999999999997。问题在于它们都可能是任何 float (如 0.1、0.01、1、10 等),这使得无法使用标准函数模或尝试减法,而浮点精度问题意味着我们有时会为本应为整数的数字获取非整数结果,或为不应为整数的数字获取整数结果。

最佳答案

一个hacky的方法是

  1. 使用 toString() 将两个数字转换为字符串
  2. 通过剥离.(包括.)之前的字符并取剩余部分的长度来计算精度点数(N)
  3. 乘以 10^N 使它们成为整数
  4. 取模并得到结果

更新的演示: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/

相关文章:

javascript - 引用页面上 ExtJS 组件的所有实例

.net - 在数据库中 float 到?在.NET中

c - C 中的四舍五入 float

javascript - 如何自定义使用 css sprite 资源的 jCountdown 计时器成为自动响应?

javascript - 获取jwplayer的状态和时间

javascript - 使用javascript的iframe问题

javascript - 当用户要写东西时如何防止重新加载?

java - Strictfp 在不同系统上返回不同结果

math - float 学有问题吗?

floating-point - 验证双值范围和步骤