11

私はこの単純な機能を持っています:

クローム、ファイアフォックス、IE:

Number(1000000).toLocaleString()
"1 000 000" // in french system, the space is the separator instead of the comma

オペラ、マクソン:

Number(1000000).toLocaleString()
"1000000"

Opera と Maxthon がフォーマットできないのはなぜですか? 彼らはこの方法をサポートしていますが、正しい方法で実行していませんか?

toLocaleString()代わりはありますか?

4

2 に答える 2

16

Number.prototype.toLocaleString出力は、ブラウザでサポートされている場合でも、ユーザーのロケール設定によっても異なりNumber(1000000).toLocaleString();ます"1,000,000"

toLocaleString()代わりはありますか?

あなたがやりたいことを正確に行うために1つ書いてみませんか?例えば、

function localeString(x, sep, grp) {
    var sx = (''+x).split('.'), s = '', i, j;
    sep || (sep = ' '); // default seperator
    grp || grp === 0 || (grp = 3); // default grouping
    i = sx[0].length;
    while (i > grp) {
        j = i - grp;
        s = sep + sx[0].slice(j, i) + s;
        i = j;
    }
    s = sx[0].slice(0, i) + s;
    sx[0] = s;
    return sx.join('.');
}

localeString(1000000.00001);
// "1 000 000.00001"
于 2013-04-22T22:39:32.900 に答える
4

言語仕様では、定義が非常に自由です。

15.7.4.3Number.prototype.toLocaleString()

ホスト環境の現在のロケールの規則に従って書式設定されたこの Number 値を表す String 値を生成します。この関数は実装依存であり、許容されますが、 toString と同じものを返すことは推奨されません

ブラウザごとに異なる実装が許可されており、ユーザーが選択したロケールに基づいて異なる実装を行うことができます。

于 2013-04-22T22:33:01.153 に答える