js在Sextillion值上添加逗号

时间:2012-11-29 16:54:56

标签: javascript

我使用一个小代码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"

我做错了什么或哪里?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

当你这样做时

nStr += '';

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

转换描述为here in ecmascript

答案 2 :(得分: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