我有一个字符n
,这是一个数字。
以下是在需要的地方添加逗号,但我也想更改小数位数。它也应该在适当的时候进行.-
var parts = n.split(".");
var num = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (parts[1] ? "." + parts[1] : "");
这会将1234.567
之类的数字转换为1,234.567
。
但我需要我的号码:1,234.57
我尝试将parts[1]
转换为数字,然后进行四舍五入,然后将其连接起来;但这很容易出错。
如何通过更改正则表达式来获得此结果?感谢。
答案 0 :(得分:7)
答案 1 :(得分:4)
var val = Math.round(Number(n) *100) / 100;
var parts = val.toString().split(".");
var num = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (parts[1] ? "." + parts[1] : "");
答案 2 :(得分:3)
您可以使用toFixed
var parts = (+n).toFixed(2).split(".");
var num = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (+parts[1] ? "." + parts[1] : "");
这也会使1234.0000
变为1234.00
,但您可以通过转换为三元组中的数字来避免这种情况,因为零是假的
答案 3 :(得分:1)
我认为这很有用
var n=1234.567
var parts = n.toFixed(2).split(".");
var num = parts[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") +
(parts[1] ? "." + parts[1] : "");
console.log(num);

如果您想要结果1,234.567
,请将toFixed(2)
更改为toFixed(3)
答案 4 :(得分:0)
在JavaScript中格式化货币时,toLocaleString非常棒。您不需要将其与toFixed
结合使用,在某些情况下它不起作用(整数,具有一位数分数的数字)。这是一个示例函数:
const formatCurrency = (num, locale = 'en-US', currency = 'USD', minimumFractionDigits = 2) => {
if (isNaN(num)) {
return num;
}
return num.toLocaleString(locale, {style: 'currency', currency, minimumFractionDigits});
};
没有超级自定义的字符串格式模式,也没有适用于特定场景的链式方法。
以下是fiddle
的示例答案 5 :(得分:0)
为避免这种情况,请转换为三进制数字,因为零是虚假的
n = parseFloat(n).toFixed(2)
var withCommas = Number(n).toLocaleString('en');
withCommas = (withCommas.indexOf(".")== -1) ? `${withCommas}.00` : withCommas;
答案 6 :(得分:0)
var valueString="1500"; //can be 1500.0 or 1500.00
var amount=parseFloat(valueString).toFixed(2);
var formattedString= amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
console.log(formattedString); //outputs 1,500.00
答案 7 :(得分:0)
添加到@Rob M的答案中(最小AND最大值为2dp):
function getMe2DecimalPointsWithCommas(amount) {
return Number(amount).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
}