如何按克罗地亚规则向下舍入价格?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,231,236→1,241,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
相关产品推荐
相关产品推荐

