gpt4 book ai didi

Javascript数字格式异常

转载 作者:行者123 更新时间:2023-12-02 20:54:00 25 4
gpt4 key购买 nike

我在 JavaScript 中格式化数字时遇到了一个奇怪的问题。我从网络上的各种来源借用了一些函数。除一种情况外,每种方法都工作良好。这是发生错误时的执行代码:

lth=appl.length+3;
var table = $("#unitsCompleted")[0];
var sum=0;
for(i=0; i<temp.length; i++){
sum += Number(table.rows[lth].cells[i+1].innerHTML);
}
var t=formatNumber(sum);
$("#mtf_retail").html("$ "+t);

其他几个地方也使用了相同的代码。其实只是简单的复制而已。下面是格式化函数:

function formatNumber(num) {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
}

除了总数 1787.78 之外,它工作正常。在图像中,您可以看到它完美地格式化了总计 1,249.69 enter image description here

最佳答案

正则表达式上的 g 标志告诉正则表达式引擎多次匹配该模式并替换每个实例。由于您的号码不是 1787.78,而是 1787.7800000000002,因此该模式将匹配 3 个连续数字前面的每个数字,并且后面会放置一个逗号。

要避免这种情况,但仍让正则表达式在长数字上多次匹配,有两种方法:

  • 调整正则表达式,使其不会与前面有句点的任何内容匹配(但由于这需要向后查找,所以它相当昂贵且丑陋,我不会推荐它)

  • 将数字四舍五入到小数点后两位

这应该有效:

function formatNumber(num) {
return num.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
}

关于Javascript数字格式异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61534769/

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