我有一个字符串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]
转换成一个数字,然后四舍五入,然后把它连接回来;但这很容易出错。
我如何通过改变我的正则表达式得到这个结果?谢谢。
编辑:2019年9月18日,
由于新的api可用,我认为指出您可以使用toLocaleString
选项更简单地完成此操作会有所帮助:
const numbers = [1, 1000, 2345.67, 21589.334719999995];
const options = {
minimumFractionDigits: 2,
maximumFractionDigits: 2
};
numbers.forEach(num => {
const formatted = Number(num).toLocaleString('en', options);
console.log(formatted);
});
原始回答
要添加逗号,您可以使用:n = parseFloat(n).toFixed(2)
var withCommas = Number(n).toLocaleString('en');
这里是小提琴
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] : "");
你可以直接使用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
,但您可以通过转换为三进制中的数字来避免这种情况,因为零是假的
我认为这是有用的
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)
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
当涉及到在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});
};
没有超自定义字符串格式模式,也没有在特定场景下工作的链式方法。
下面是一个例子
通过转换为三进制中的数字来避免这种情况,因为零是假的
n = parseFloat(n).toFixed(2)
var withCommas = Number(n).toLocaleString('en');
withCommas = (withCommas.indexOf(".")== -1) ? `${withCommas}.00` : withCommas;
添加到@Rob M的答案(最小和最大2dp):
function getMe2DecimalPointsWithCommas(amount) {
return Number(amount).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
}
我认为这是用不同的区域设置格式化数字的简单方法
const NumberFormatter = (value, decimal) => {
return parseFloat(parseFloat(value).toFixed(decimal)).toLocaleString(
"en-IN",
{
useGrouping: true,
}
);};
代替"en-IN"您可以指定语言。比如"ja-JP"、"en-US"one_answers"de-DE"等等。它将根据区域设置对数字和符号进行分组。
Ref: Format Numbers