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.NumberFormat
与 Math.round
等其他 JavaScript 方法相比,rounding away from zero 具有更明智的行为。例如,Math.round(999.5)
returns 1000
但 Math.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)); //
我目前正在使用以下代码格式化数字以显示为货币值:
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.NumberFormat
与 Math.round
等其他 JavaScript 方法相比,rounding away from zero 具有更明智的行为。例如,Math.round(999.5)
returns 1000
但 Math.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)); //