4 个回答
✓ 已被采纳

什么鬼///
先转换为整数,再做计算。
JS的小数是不准确的,0.1,0.2,0.3等等都不准确,只有0.25,0.5这类才可准确表示。
细节要看小数转为二进制是否是无损。

十进制的 0.3 和 0.1 都会被转换成二进制,但由于浮点数用二进制表达时是无穷的,IEEE 754 标准的 64 位双精度浮点数的小数部分最多支持 53 位二进制位,所以两者求余之后得到二进制为无穷,解决办法如下:

parseFloat((0.3 % 0.1).toFixed(10)) // 结果为 3

先乘成整数算出结果再除?试试?

误差精度为2的-50次方。

function isDivisibleBy(dividend) {
  return divisor => {
    const quotient = dividend / divisor;
    const diff = Math.abs(Math.round(quotient) - quotient);
    return diff < Number.EPSILON * 0b100;
  };
}

console.log(isDivisibleBy(0.3)(0.1));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏