Javascript Intl.NumberFormat 0或两个小数位数
我的格式化程序看起来像这样Javascript Intl.NumberFormat 0或两个小数位数,javascript,Javascript,我的格式化程序看起来像这样 const formatter=new Intl.NumberFormat('en-NZ'{ 风格:“货币”, 货币:“新西兰元”, 最小分数位数:2, });您可以尝试以下方法: formatter.format(amount).replace(/\D00$/, ''); 更新: 为了回应@Marek几个月后的评论,上面的正则表达式已经处理了不同的十进制符号(或者或者,),但是它确实不处理尾随的货币符号。可以通过以下方式进行修复: formatter.forma
const formatter=new Intl.NumberFormat('en-NZ'{
风格:“货币”,
货币:“新西兰元”,
最小分数位数:2,
});代码>您可以尝试以下方法:
formatter.format(amount).replace(/\D00$/, '');
更新:
为了回应@Marek几个月后的评论,上面的正则表达式已经处理了不同的十进制符号(或者
或者,
),但是它确实不处理尾随的货币符号。可以通过以下方式进行修复:
formatter.format(amount).replace(/\D00(?=\D*$)/, '');
我将实现两种不同的格式,并使用模%
4 % 1 == 0
4.1 % 1 == .1
希望这有帮助:)
const formatter=new Intl.NumberFormat('en-NZ'{
风格:“货币”,
货币:“新西兰元”,
最小分数位数:2,
});
常量分数=新的整数格式('en-NZ'{
风格:“货币”,
货币:“新西兰元”,
最小分数位数:0,
});
设数=4.1;
如果(数字%1==0)
console.log(分数.格式(数字));
其他的
console.log(formatter.format(number));
数字=4;
如果(数字%1==0)
console.log(分数.格式(数字));
其他的
console.log(formatter.format(number))代码>使用Intl.NumberFormat时,正确的方法是在构造函数中设置maximumFractionDigits和minimumFractionDigits选项,同时使用整数的模%验证输入值(根据这是正确的答案!)。公认的答案是某种字符串操作
const fraction=new Intl.NumberFormat('en-NZ'){
风格:“货币”,
货币:“新西兰元”,
最小分数位数:0,
最大分数位数:0,
});
常量格式化程序=新的Intl.NumberFormat('en-NZ'{
风格:“货币”,
货币:“新西兰元”,
最小分数位数:2,
});
设数=4.1;
如果(数字%1==0)
console.log(分数.格式(数字));
其他的
console.log(formatter.format(number));
数字=4;
如果(数字%1==0)
console.log(分数.格式(数字));
其他的
console.log(formatter.format(number))代码>当我研究这个问题时,我在Github上发现了一条关于它的帖子,建议同时使用maximumFractionDigits和minimumFractionDigits。文章指出,如果两者都不使用,它将抛出一个错误
// works
var Intl = require('intl');
new Intl.NumberFormat("en", {
maximumFractionDigits: 0,
minimumFractionDigits: 0,
style: 'currency',
currency: 'USD'
}).format(4000.33)
Woow Regex的使用真是太棒了。我不明白为什么我们会被否决,但你的解决方案很好。我会投票给你的,先生,我会报答你的。谢谢。:)建议的解决方案在格式化程序附加而不是预先附加货币代码/符号的某些地区不起作用。例如sk
地区和EUR
货币生产12,50€
。另外,你需要考虑不同的分数分隔符(逗号,点)。在这种情况下,您可以使用format
方法,该方法生成一个数组,其中每个片段都是唯一标识的。然后,您所需要做的就是有条件地过滤掉分数
和小数
片段?.replace('.00','')
不够简单吗?@ViBoNaCci,是的,如果你不关心处理其他地区,你可以不用正则表达式。正则表达式是用来将点或逗号作为十进制符号处理的。似乎是最安全的选择。这个例子并没有达到提问者的目标:“0或两个小数位数”,您可以尝试并编辑代码段上的数字
,以查看功能在使用Intl.numberformat时,使用最小和最大分数位数是正确的方法。没有任何选项maximumFractionDigits
。@Acidic9在这里查看@Acidic9是否仅尝试使用maximumFractionDigits
?我发现它给出了一个错误,你不使用两者。