我的格式化程序看起来像这样
const formatter = new Intl.NumberFormat('en-NZ', {
style: 'currency',
currency: 'NZD',
minimumFractionDigits: 2,
});
我怎样才能调整它,使整数有0个小数位
formatter.format(4); // want output "$4"
而分数总是显示两位数
formatter.format(4.1); // want output "$4.10"
6条答案
按热度按时间igetnqfo1#
使用Intl.NumberFormat时,正确的方法是在构造函数中设置 maximumFractionDigits 和 minimumFractionDigits 选项,同时使用整数的模%验证输入值(每个https://stackoverflow.com/a/49724586/1362535这是正确的答案!)。公认的答案是某种字符串操作。
jobtbby32#
你可以试试这样的东西:
更新:
作为对@Marek几个月后的评论的回应,上面的正则表达式已经处理了不同的十进制符号(
.
或,
),但它确实不处理尾随的货币符号。可以这样修复:qgzx9mmu3#
我将实现两种不同的格式,并使用模
%
验证它希望这对你有帮助:)
xxslljrj4#
当我研究这个问题时,我在Github上发现了一个关于它的帖子,建议同时使用maximumFractionDigits和minimumFractionDigits。文章指出,如果两者都不使用,则会抛出错误。
https://github.com/ember-intl/ember-intl/issues/167
zynd9foi5#
**更新:请看@yoduh的答案,我的答案并没有完全回答这个问题。
现在看来,最简单的方法是简单地将“minimumFractionDigits”设置为0,将“maximumFractionDigits”设置为2,就像这样:
velaa5lx6#
2023答案
一个新的
Intl.NumberFormat
选项尾随ZeroDisplay可用于剥离分数数字 * 如果 * 分数数字都是零,否则将使用最小和最大分数数字选项。这将使用两个格式化程序和一个格式化程序复制答案的行为