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

如何按克罗地亚规则向下舍入价格?jQuery实现价格舍入需求

实现符合克罗地亚规定的两位小数舍入规则

你需要的是遵循特定舍入逻辑的两位小数保留:第三位小数为5时向下舍入,大于5时向上舍入,小于5时直接截断。常规方法如Math.round或toFixed会将1.235向上舍为1.24,不符合要求,以下是可靠的实现方案:

代码实现

// 将克罗地亚格式的数字字符串(逗号做小数点)转为JS数值
function parseCroatianNumber(numStr) {
  return Number(numStr.replace(',', '.'));
}

// 自定义舍入函数,严格遵循规则
function croatianRound(num) {
  const scaled = num * 100;
  const integerPart = Math.floor(scaled);
  const decimalPart = scaled - integerPart;
  
  // 仅当第三位小数严格大于5时进位,否则截断
  return decimalPart > 0.5 ? (integerPart + 1) / 100 : integerPart / 100;
}

// 将结果转回克罗地亚格式的字符串(逗号做小数点)
function formatCroatianNumber(num) {
  return num.toString().replace('.', ',');
}

// 测试示例
const testCases = ['1,235', '1,236', '1,234'];
testCases.forEach(caseStr => {
  const num = parseCroatianNumber(caseStr);
  const result = croatianRound(num);
  console.log(`${caseStr} → ${formatCroatianNumber(result)}`);
});

测试输出

  • 1,235 → 1,23
  • 1,236 → 1,24
  • 1,234 → 1,23

重要提示

  • 你原代码中var num = 1,235;是语法错误,JS使用点作为小数点,逗号是变量分隔符,正确写法应为var num = 1.235;或用字符串形式处理后转换。
  • 常规Math.round(1.235 * 100)看似能得到123,但这是依赖JS浮点精度的偶然结果(1.235 * 100实际计算为123.49999999999999),并非可靠实现。自定义函数通过明确判断小数部分,确保规则稳定生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:35:41