【发布时间】:2017-09-06 12:03:12
【问题描述】:
我最近在回答另一个 StackOverflow 问题时想出了这段代码。基本上,在模糊时,此代码将正确地以千位逗号分隔,并将小数点保留为两位数(如 USD 的书写方式 [7,745.56])。
我想知道是否有更简洁的方法来使用正则表达式来分隔和切断过多的小数位。我最近用我最近的尝试更新了这篇文章。有没有更好的方法来使用正则表达式?
输入 -> 目标输出
7456 -> 7,456
45345 -> 45,345
25.23523534 -> 25.23
3333.239 -> 3,333.23
234.99 -> 234.99
2300.99 -> 2,300.99
23123123123.22 -> 23,123,123,123.22
当前正则表达式
var result;
var str = []
reg = new RegExp(/(\d*(\d{2}\.)|\d{1,3})/, "gi");
reversed = "9515321312.2323432".split("").reverse().join("")
while (result = reg.exec(reversed)) {
str.push(result[2] ? result[2] : result[0])
}
console.log(str.join(",").split("").reverse().join("").replace(",.","."))
【问题讨论】:
-
我不认为正则表达式是为了添加字符。所以如果我有
10000.50你想要10,000.5000对吗? -
@Rajesh 不,如果我有 1000.562343,那么我想要 1000.56。但是感谢您指出我不能添加小数...没想到这一点。
-
value.toLocaleString('en-US', {maximumFractionDigits:2})有什么兼容性问题?它适用于 Firefox、Chrome 和 IE。 -
toLocaleString仅用于此目的。对所有事情都滥用正则表达式并不好。你说toFixed很乱!?这里使用的正则表达式更加混乱。还有@ConnorsFan,你为什么删除你的答案?这是this question which seems to be suffering from an XY problem的唯一正确答案。
标签: javascript jquery regex