3

桁区切りなしでローカライズされた数値を生成する数値形式はありますか?

 Globalize.format("1000.12", "n?" )

私ができることに気づきました:

Globalize.culture().numberFormat[","]="";

しかし、オフにしたいフィールドとオンにしたいフィールドがあります。たとえば... 値が次の場合:

1000.123 -> ロケールに応じて 1000,12 または 1000.12 にフォーマットされた状態で表示したい..ただし、千単位の区切り文字は使用しないでください。

4

1 に答える 1

4

"n" 形式の代わりに "d" 形式を使用して、桁区切り記号を除外できます。

Globalize.format(1000.12, "d");

編集
これは、小数部分を気にしない場合にのみ機能することに注意してください。

私の知る限り、小数部分が気になる場合は、次のいずれかの方法を使用しない限り、桁区切り記号を除外することはできません。

  1. カルチャ オブジェクトの千文字を空の文字列に設定します。

    Globalize.culture().numberFormat[","] = "";
    Globalize.format(1000.12, "n");
    

    これを非常に簡単にユーティリティ関数に変換できます。

    function formatNumberNoThousands(num, format, culture) {
        var numberFormat = Globalize.cultures[culture || Globalize.culture().name].numberFormat,
            thousands = numberFormat[","];
        numberFormat[","] = "";
        try { return Globalize.format(num, format, culture); }
        finally { numberFormat[","] = thousands; }
    }
    
  2. 次の形式の文字列結果に対して置換を実行します。

    Globalize.format(1000.12, "d").replace(new RegExp("\\" + Globalize.culture().numberFormat[","], "g"), "");
    

    これは簡単にユーティリティ関数に変換することもできます:

    function formatNumberNoThousands(num, format, culture) {
        return Globalize.format(num, format).replace(new RegExp("\\" +  Globalize.culture(culture).numberFormat[","], "g"), "");
    }
    

    このアプローチでは、フォーマットされた結果に 1000 文字を超えることがないことがわかっている場合は、正規表現を削除できます。そうではなく、これを頻繁に使用するか、ループの中で使用する予定がある場合は、正規表現をキャッシュして再利用する必要があります。

于 2013-01-16T23:32:06.887 に答える