2

1 つの小さなコード 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;
}

セクスティリオン値のような大きな値にコンマを追加しようとすると問題が発生します。例えば。

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

しかし、このような大きな値を使用する場合

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

私は何を、どこで間違っていますか?

4

3 に答える 3

2

入力はすでにfloatである可能性があります。2^32より大きい数はこのようになる傾向があります。入力が文字列であり、関数が正常に実行されることを確認してください。

JavaScriptにはタイプがintありません。float代わりに、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 に答える