You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

检查数字第四位小数是否为0时现有代码判定结果异常如何解决

问题原因

你遇到的是JavaScript双精度浮点数精度丢失的典型问题:

十进制小数转二进制存储时,大部分小数无法被精确表示,会出现微小的截断误差。比如1.2570 * 10000实际计算结果不是精确的12570,而是12569.999999999998,取模10后结果不为0。而1.2580的二进制表示误差极小,乘10000后接近精确值,所以能通过校验。

解决方案

方案1:字符串处理法(最稳妥,完全避开浮点数运算误差)

直接把数值转为字符串提取第四位小数,适合所有常规数值场景:

function checkFourthDecimal(quantity) {
  // 拆分整数、小数部分
  const [_, decimalPart = ''] = String(quantity).split('.');
  // 小数位补0到至少4位
  const fullDecimal = decimalPart.padEnd(4, '0');
  // 取第四位(索引为3)判断
  return fullDecimal[3] === '0';
}

// 最终校验逻辑
!!(submission && checkFourthDecimal(quantity));

方案2:精度修正数学运算法(适合数值范围确定的场景)

对运算结果先做四舍五入消除精度误差,再做取模判断,代码更简洁:

!!(submission && (Math.round(quantity * 10000) % 10) === 0);

如果需要兼容极小误差场景,可以加上JS内置的精度常量修正:

!!(submission && (Math.round((quantity * 10000) + Number.EPSILON) % 10) === 0);

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:27:00