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
?我发现它给出了一个错误,你不使用两者。