Regex格式字符串数字与逗号和2个小数在javascript
regex format string number with commas and 2 decimals in javascript
我有一个字符串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"answers"de-DE"等等。它将根据区域设置对数字和符号进行分组。
Ref: Format Numbers
- 在数字字符串的最后两个数字上加上小数
- 对于大的数字,在这个本地化函数上强制使用两个小数
- 如何使用 javascript 获取带有 2 个小数且不舍入的数字
- 如何使输入只接受两个小数,并且最多有10位数字
- Javascript四舍五入到2个小数
- 在javascript中获取超过17个小数
- Javascript-只获取所选元素的两个小数
- 我想比较两个小数,看哪个更大
- Regex格式字符串数字与逗号和2个小数在javascript
- 用两个小数解析浮点,
- 需要目前的整数与2个小数(5.00)在javascript
- 为什么JavaScript列表中的多个小数会在元素list'后抛出'错误
- 在不使用. tofixed()的情况下用两个小数格式化float
- 两个整数,三个小数的正则表达式(XX.XXX)
- 如何四舍五入,如果值是两个小数和格式为3个小数在javascript
- 用javascript将数字转换为逗号分隔的格式,其中包含两个小数
- 如果小于 4 个小数,如何添加零,如果更多,则删除
- js设置y轴标签格式以显示两个小数
- JavaScript中的2个小数,没有正则表达式,没有四舍五入
- 在PHP中,如何打印一个有2个小数的数字,但前提是已经有小数