2

我使用一个小代码 js 将逗号添加到值:

function addCommas(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}

尝试将逗号添加到诸如 sextillion 值之类的大值时遇到问题。例如。

addCommas(1000000) //return correct "1,000,000"

但是如果使用像这样的大值

addCommas(50949024266983356472874) // return wrong "5.094902426698335e+22"

我做错了什么或哪里做错了?

4

3 回答 3

2

您的输入可能已经是一个浮点数。大于 2^32 的数字往往是这样的。确保您的输入是一个字符串,并且您的函数将运行良好。

JavaScript 没有intfloat类型。相反,它只有一个Number类型,它会自行决定何时使用哪个类型。

于 2012-11-29T16:56:43.347 回答
1

当你这样做

nStr += '';

您要求 javascript 首先将您的数字转换为字符串。那时它决定将其写为"5.094902426698335e+22". 问题不在于您的算法的其余部分。

转换在 ecmascript 中进行了描述

于 2012-11-29T16:56:50.877 回答
0

如果您的号码存储在字符串中,则以下函数将实现您的要求。

function addCommas( txtNum ) {
    var parts = txtNum.split(".");
    parts[0] = parts[0].reverse().replace(/(\d{3})/g, "$1,").reverse();
    return parts.join(".");
}   

String.prototype.reverse = function () {
    return this.split("").reverse().join("");
}

addCommas( "-50000000000000000000000000000000000000000.0000" );
// => -50,000,000,000,000,000,000,000,000,000,000,000,000,000.0000
于 2012-11-29T17:14:49.133 回答