如何在JavaScript中获取不同货币对应的小数位数?
如何在JavaScript中获取不同货币对应的小数位数?
当然可以啦!JavaScript里有个非常好用的原生API——Intl.NumberFormat,专门用来处理国际化的数字、货币格式化,用它就能轻松拿到不同货币对应的小数位数。
核心思路
Intl.NumberFormat创建的格式化器,通过resolvedOptions()方法可以获取到该格式化器的最终配置,其中maximumFractionDigits和minimumFractionDigits这两个属性,就是该货币对应的小数位数(绝大多数情况下两者数值一致)。
具体示例
1. 获取美元(USD)的小数位数
// 创建美元的货币格式化器 const usdFormatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }); // 获取格式化器的配置选项 const usdOptions = usdFormatter.resolvedOptions(); // 输出小数位数 console.log(usdOptions.maximumFractionDigits); // 结果:2
2. 获取日元(JPY)的小数位数
// 创建日元的货币格式化器 const jpyFormatter = new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }); const jpyOptions = jpyFormatter.resolvedOptions(); console.log(jpyOptions.maximumFractionDigits); // 结果:0
3. 特殊案例:科威特第纳尔(KWD)
科威特第纳尔的小数位数是3位,我们也能准确获取:
const kwdFormatter = new Intl.NumberFormat('ar-KW', { style: 'currency', currency: 'KWD' }); const kwdOptions = kwdFormatter.resolvedOptions(); console.log(kwdOptions.maximumFractionDigits); // 结果:3
封装成通用函数
如果需要频繁调用,可以封装成一个简单的工具函数,这样用起来更方便:
function getCurrencyDecimalPlaces(currencyCode) { // 这里的locale用任意支持的都可以,比如'en-US',因为小数位数是由货币本身决定的 const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: currencyCode }); const options = formatter.resolvedOptions(); // 直接返回小数位数(max和min通常一致) return options.maximumFractionDigits; } // 调用示例 console.log(getCurrencyDecimalPlaces('USD')); // 2 console.log(getCurrencyDecimalPlaces('JPY')); // 0 console.log(getCurrencyDecimalPlaces('EUR')); // 2 console.log(getCurrencyDecimalPlaces('KWD')); // 3
注意事项
- 传入的
currencyCode必须是ISO 4217标准的三位货币代码(比如USD、JPY、EUR),否则可能会抛出错误或者返回默认的小数位数。 Intl.NumberFormat是ES6之后引入的API,现代浏览器和Node.js(v10及以上)都支持,兼容性不用担心。
备注:内容来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

