You need to enable JavaScript to run this app. 如何实现满足全部指定测试用例的JS自定义四舍五入逻辑
优惠活动
大模型
产品
解决方案
定价
更多

如何实现满足全部指定测试用例的JS自定义四舍五入逻辑

问题原因

你现有的代码有两处核心问题:

  1. 直接对浮点数做乘除运算会存在精度误差,JS 中很多十进制小数无法被二进制精确表示,比如 0.045 * 100 实际计算结果是 4.499999999999999 而非预期的 4.5,会导致判断逻辑出错。
  2. 你的判断条件逻辑错误,原逻辑取 (num * 1000) % 100 作为判断依据,实际我们只需要判断千分位的单个数字是否大于等于5,就能决定是否进位。

统一实现方案

我们可以先将数值放大1000倍后取整,消除浮点数精度误差,再根据千分位的值判断是否进位,一套逻辑即可覆盖所有测试用例:

function roundOff(num) {
  // 放大1000倍后四舍五入取整,消除浮点数运算精度误差
  const scaled = Math.round(num * 1000);
  // 取千分位的数字
  const thousandthDigit = scaled % 10;
  // 取乘以100后的整数部分
  const integerPart = Math.floor(scaled / 10);
  // 千分位>=5则进位,否则直接返回整数部分
  return thousandthDigit >= 5 ? integerPart + 1 : integerPart;
}

// 测试用例
document.write("Result for 0.045 :" + roundOff(0.045) + "<br>");
document.write("Result for 0.955 :" + roundOff(0.955) + "<br>");
document.write("Result for 0.995 :" + roundOff(0.995) + "<br>");
document.write("Result for 0.01 :" + roundOff(0.01) + "<br>");
document.write("Result for 0.1 :" + roundOff(0.1) + "<br>");
document.write("Result for 0.175 :" + roundOff(0.175) + "<br>");
document.write("Result for 0.007 :" + roundOff(0.007) + "<br>");
document.write("Result for 0.818 :" + roundOff(0.818) + "<br>");

所有测试用例运行结果和预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 21:36:04