JavaScript 中的格式货币删除 .00

Format currency in JavaScript removing .00

我目前正在使用以下代码格式化数字以显示为货币值:

return symbol + value.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, ",");

其中符号为 £、$ 等,值是具有多位小数的数字。这很好用,但我现在想删除尾随 .00(如果存在)。

目前我有这个输出:

1.23454 => £1.23
1 => £1.00
50.00001 => £50.00
2.5 => £2.50

我想要以下:

1.23454 => £1.23
1 => £1
50.00001 => £50
2.5 => £2.50

有没有比

更干净的方法
var amount = symbol + value.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, ",");
return amount.replace(".00", "");

或者那个解决方案是最好的方法吗?

var value = 1.23454;
var symbol = '£';
value = value.toFixed(2);
var amount = symbol + value.replace(/(\d)(?=(\d{3})+\.)/g, ",");
alert(amount.replace(".00", ""));

请将值更改为测试

根据@RobG 的建议,我可以使用:

symbol + value.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, ",").replace(/\.00/g, '')

调查Intl.NumberFormat。这是一个非常方便的原生 api.

let number = 1.23454;

console.log(new Intl.NumberFormat('en-GB', {
  style: 'currency',
  currency: 'GBP'
}).format(number).replace(/(\.|,)00$/g, ''));
// → £1.23

您可以 Intl.NumberFormat 将货币四舍五入到最接近的美元(或英镑或其他),方法是将 maximumSignificantDigits 设置为您数字的整数部分的位数

let number = 999.50;

console.log(new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
  maximumSignificantDigits: Math.trunc(Math.abs(number)).toFixed().length,
}).format(number));  // ,000 (rounds up because 50 cents)

如果您使用的是负货币,请记住 Intl.NumberFormatMath.round 等其他 JavaScript 方法相比,rounding away from zero 具有更明智的行为。例如,Math.round(999.5) returns 1000Math.round(-999.5) returns -999 而使用 Intl.NumberFormat 将 return 1000-1000.

它可以通过简单的方式完成

(parseFloat(percentage) / 100) * product.price)
    .toFixed(2)
    .toString()
    .replace('.00', '')

要删除 Intl.NumberFormat 函数中的尾随零,我使用了以下代码:

let number = 50;
console.log(new Intl.NumberFormat('en-US', {
 style: 'currency',
 currency: 'USD',
 maximumSignificantDigits: (number + '').replace('.', '').length,
}).format(number)); //