如何调整Intl.NumberFormat使整数0位小数、小数2位小数?
解决整数/小数差异化货币格式化的问题
刚好碰到过类似的需求,要实现新西兰元的这种差异化小数显示,其实只需要动态判断数值是否为整数,然后调整Intl.NumberFormat的配置就行,直接上代码:
完整实现代码
function formatNZD(amount) { // 先确认是有效数字,避免传入非数值导致报错 const numAmount = Number(amount); if (isNaN(numAmount)) return 'Invalid amount'; // 判断是否为整数(4.0这类也会被识别为整数) const isWholeNumber = Number.isInteger(numAmount); const formatter = new Intl.NumberFormat('en-NZ', { style: 'currency', currency: 'NZD', // 整数时不显示小数,非整数强制显示两位 minimumFractionDigits: isWholeNumber ? 0 : 2, maximumFractionDigits: isWholeNumber ? 0 : 2, }); return formatter.format(numAmount); } // 测试几个场景看看效果 console.log(formatNZD(4)); // 输出: $4 console.log(formatNZD(4.1)); // 输出: $4.10 console.log(formatNZD(4.125)); // 输出: $4.13(自动四舍五入,符合货币规则) console.log(formatNZD(1234)); // 输出: $1,234(原生千位分隔符也保留了)
关键点说明
- 用
Number.isInteger()精准判断整数,比amount % 1 === 0更靠谱,能正确识别4.0这类带.0的整数 - 同时设置
minimum和maximum小数位数,确保整数完全不显示小数部分,非整数严格固定两位小数 - 开头加了数值有效性校验,避免传入字符串或非数值时出现异常结果,如果你的输入都是确定的Number类型,可以去掉这部分简化代码
内容的提问来源于stack exchange,提问作者alt
相关产品推荐
相关产品推荐

