gpt4 book ai didi

javascript - 正则表达式用逗号分隔千位并保留两位小数

转载 作者:数据小太阳 更新时间:2023-10-29 04:54:19 24 4
gpt4 key购买 nike

我最近在回答另一个 StackOverflow 问题时想出了这段代码。基本上,在模糊的情况下,此代码将正确地以逗号分隔千位并将小数保留为两位数(就像美元的书写方式 [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(",.","."))

最佳答案

作为 Regex 的替代方法,您可以使用以下方法

Number(num.toFixed(2)).toLocaleString('en-US')

num.toLocaleString('en-US', {maximumFractionDigits: 2})

您仍然可以使用 toFixed(2),但它非常干净。 toFixed(2) 虽然不会像您想要的那样降低数字。与 {maximumFractionDigits: 2} 同样作为 toLocaleString 的第二个参数。

var nums = [7456, 45345, 25.23523534, 3333.239, 234.99, 2300.99, 23123123123.22]

for (var num of nums)
console.log(num, '->', Number(num.toFixed(2)).toLocaleString('en-US') )

底数 就像你展示的那样有点棘手。执行类似 (num * 100 | 0)/100 的操作无效。计算会失去精度(例如,在某些情况下 .99 会变成 .98)。 (同样 |0 不能处理更大的数字,但即使是 Math.floor() 也有精度问题)。

解决方案是将数字视为字符串。

function format(num) {
var num = num.toLocaleString('en-US')
var end = num.indexOf('.') < 0 ? num.length : num.indexOf('.') + 3
return num.substring(0, end)
}

var nums = [7456, 45345, 25.23523534, 3333.239, 234.99, 2300.99, 23123123123.22]

for (var num of nums) console.log(num, '->', format(num))

function format(num) {
var num = num.toLocaleString('en-US')
var end = num.indexOf('.') < 0 ? num.length : num.indexOf('.') + 3
return num.substring(0, end)
}

(当更改为不同于 'en-US' 的另一种格式时,请注意数字中的 .,因为某些语言使用 , 作为分形分隔符)

为了兼容性,根据CanIUse toLocaleString('en-US')

supported in effectively all browsers (since IE6+, Firefox 2+, Chrome 1+ etc)

关于javascript - 正则表达式用逗号分隔千位并保留两位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43340193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com