Intl.NumberFormat 0或2个小数位

时间:2018-04-09 01:48:50

标签: javascript

我的格式化工具看起来像这样



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"

4 个答案:

答案 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)

https://github.com/ember-intl/ember-intl/issues/167