3

数値をフォーマットしたい。数値文字列にカンマを挿入する正規表現の例をいくつか見てきました。いずれも 3 桁を連続してチェックし、数字にカンマを挿入します。しかし、私はこのようなものが欲しい:

122 as 122
1234 as 1,234
12345 as 12,345
1723456 as 17,23,456
7123456789.56742 as 7,12,34,56,789.56742

私は正規表現に非常に慣れていません。上記のように数字を表示する方法を教えてください。私は以下の方法を試しました。これは常に 3 桁をチェックしてからカンマを追加します。

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

しかし、上記のように、小数点の前の最後の3桁を除いて、2桁ごとにコンマが必要です。

4

4 に答える 4

11

結果は、ブラウザのロケールによって異なります。しかし、これは許容できる解決策かもしれません:

(7123456789.56742).toLocaleString();

出力:

7,123,456,789.56742

それを試して7,12,34,56,789.567421、あなたのロケールで出力されるかどうかを確認してください。

于 2012-05-30T06:08:31.940 に答える
4

数値をヨーロッパ (1.000,00 - デフォルト) または USA (1,000.00) スタイルに変換する関数を次に示します。

function sep1000(somenum,usa){
  var dec = String(somenum).split(/[.,]/)
     ,sep = usa ? ',' : '.'
     ,decsep = usa ? '.' : ',';
  return dec[0]
         .split('')
         .reverse()
         .reduce(function(prev,now,i){
                   return i%3 === 0 ? prev+sep+now : prev+now;}
                )
         .split('')
         .reverse()
         .join('') +
         (dec[1] ? decsep+dec[1] :'')
  ;
}

別:

function sep1000(somenum,usa){
  var dec = String(somenum).split(/[.,]/)
     ,sep = usa ? ',' : '.'
     ,decsep = usa ? '.' : ',';

  return xsep(dec[0],sep) + (dec[1] ? decsep+dec[1] :'');

  function xsep(num,sep) {
    var n = String(num).split('')
       ,i = -3;
    while (n.length + i > 0) {
        n.splice(i, 0, sep);
        i -= 4;
    }
    return n.join('');
  }
}
//usage for both functions
alert(sep1000(10002343123.034));      //=> 10.002.343.123,034
alert(sep1000(10002343123.034,true)); //=> 10,002,343,123.034

[コメントに基づいて編集i -= 4;] 100 で区切りたい場合は、単に次のように変更しますi -= 3;

function sep100(somenum,usa){
  var dec = String(somenum).split(/[.,]/)
     ,sep = usa ? ',' : '.'
     ,decsep = usa ? '.' : ',';

  return xsep(dec[0],sep) + (dec[1] ? decsep+dec[1] :'');

  function xsep(num,sep) {
    var n = String(num).split('')
       ,i = -3;
    while (n.length + i > 0) {
        n.splice(i, 0, sep);
        i -= 3;  //<== here
    }
    return n.join('');
  }
}
于 2012-05-30T05:55:58.797 に答える