我的格式化工具看起来像这样
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"
答案 0 :(得分:8)
使用Intl.NumberFormat时的正确方法是在构造函数中同时设置 maximumFractionDigits 和 minimumFractionDigits 选项,同时使用整数的模数%验证输入值(根据https://stackoverflow.com/a/49724586/1362535 ,这是正确的答案!)。可接受的答案是某种字符串操作。
const fraction = new Intl.NumberFormat('en-NZ', {
style: 'currency',
currency: 'NZD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
const formatter = new Intl.NumberFormat('en-NZ', {
style: 'currency',
currency: 'NZD',
minimumFractionDigits: 2,
});
let number = 4.1;
if(number % 1 == 0)
console.log(fraction.format(number));
else
console.log(formatter.format(number));
number = 4;
if(number % 1 == 0)
console.log(fraction.format(number));
else
console.log(formatter.format(number));
答案 1 :(得分:4)
您可以尝试这样的事情:
formatter.format(amount).replace(/\D00$/, '');
答案 2 :(得分:2)
我会实现两种不同的格式,并使用模%
4 % 1 == 0
4.1 % 1 == .1
希望这会有所帮助:)
const formatter = new Intl.NumberFormat('en-NZ', {
style: 'currency',
currency: 'NZD',
minimumFractionDigits: 2,
});
const fraction = new Intl.NumberFormat('en-NZ', {
style: 'currency',
currency: 'NZD',
minimumFractionDigits: 0,
});
let number = 4.1;
if(4%1 == 0)
console.log(formatter.format(number));
else
console.log(fraction.format(number));
number = 4;
if(4%1 == 0)
console.log(formatter.format(number));
else
console.log(fraction.format(number));
答案 3 :(得分:1)
当我对此进行研究时,我在Github上发现了一个有关该帖子的建议,建议同时使用maximumFractionDigits和minimumFractionDigits。该文章指出,如果不同时使用这两种方法,则会引发错误。
// works
var Intl = require('intl');
new Intl.NumberFormat("en", {
maximumFractionDigits: 0,
minimumFractionDigits: 0,
style: 'currency',
currency: 'USD'
}).format(4000.33)