175

jQueryを使用して3桁ごとにコンマ区切りを使用して数値をフォーマットするにはどうすればよいですか?

例えば:

╔═══════════╦═════════════╗
║   Input   ║   Output    ║
╠═══════════╬═════════════╣
║       298 ║         298 ║
║      2984 ║       2,984 ║
║ 297312984 ║ 297,312,984 ║
╚═══════════╩═════════════╝
4

13 に答える 13

261

@Paul Creasey は正規表現として最も単純なソリューションを持っていましたが、ここでは単純な jQuery プラグインとして示しています。

$.fn.digits = function(){ 
    return this.each(function(){ 
        $(this).text( $(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") ); 
    })
}

次に、次のように使用できます。

$("span.numbers").digits();
于 2010-01-02T04:18:30.093 に答える
81

正規表現に興味があり、置換の正確な構文がわからない場合は、このようなものです!

MyNumberAsString.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
于 2010-01-02T03:50:52.677 に答える
27

NumberFormatterを試すことができます。

$(this).format({format:"#,###.00", locale:"us"});

もちろん、米国を含むさまざまなロケールもサポートしています。

これを使用する方法の非常に単純化された例を次に示します。

<html>
    <head>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript" src="jquery.numberformatter.js"></script>
        <script>
        $(document).ready(function() {
            $(".numbers").each(function() {
                $(this).format({format:"#,###", locale:"us"});
            });
        });
        </script>
    </head>
    <body>
        <div class="numbers">1000</div>
        <div class="numbers">2000000</div>
    </body>
</html>

出力:

1,000
2,000,000
于 2010-01-02T03:33:19.030 に答える
26

2016年の回答:

Javascript にはこの機能があるため、Jquery は必要ありません。

yournumber.toLocaleString("en");
于 2016-02-17T00:58:28.320 に答える
24

関数 Number(); を使用します。

$(function() {

  var price1 = 1000;
  var price2 = 500000;
  var price3 = 15245000;

  $("span#s1").html(Number(price1).toLocaleString('en'));
  $("span#s2").html(Number(price2).toLocaleString('en'));
  $("span#s3").html(Number(price3).toLocaleString('en'));

  console.log(Number(price).toLocaleString('en'));

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<span id="s1"></span><br />
<span id="s2"></span><br />
<span id="s3"></span><br />

于 2015-07-08T07:28:59.640 に答える
24

これはjQueryではありませんが、私にとってはうまくいきます。このサイトから取得。

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;
}
于 2010-01-02T03:45:55.493 に答える
17

より徹底した解決策

これの核心はreplace呼び出しです。これまでのところ、提案されたソリューションのいずれも、次のケースのすべてを処理しているとは思いません。

  • 整数:1000 => '1,000'
  • 文字列:'1000' => '1,000'
  • 文字列の場合:
    • 10 進数の後のゼロを保持します。10000.00 => '10,000.00'
    • 10 進数の前の先行ゼロを破棄します。'01000.00 => '1,000.00'
    • 小数点の後にコンマを追加しません:'1000.00000' => '1,000.00000'
    • 先頭の-orを保持+:'-1000.0000' => '-1,000.000'
    • 非数字を含む変更されていない文字列を返します。'1000k' => '1000k'

次の関数は、上記のすべてを行います。

addCommas = function(input){
  // If the regex doesn't match, `replace` returns the string unmodified
  return (input.toString()).replace(
    // Each parentheses group (or 'capture') in this regex becomes an argument 
    // to the function; in this case, every argument after 'match'
    /^([-+]?)(0?)(\d+)(.?)(\d+)$/g, function(match, sign, zeros, before, decimal, after) {

      // Less obtrusive than adding 'reverse' method on all strings
      var reverseString = function(string) { return string.split('').reverse().join(''); };

      // Insert commas every three characters from the right
      var insertCommas  = function(string) { 

        // Reverse, because it's easier to do things from the left
        var reversed           = reverseString(string);

        // Add commas every three characters
        var reversedWithCommas = reversed.match(/.{1,3}/g).join(',');

        // Reverse again (back to normal)
        return reverseString(reversedWithCommas);
      };

      // If there was no decimal, the last capture grabs the final digit, so
      // we have to put it back together with the 'before' substring
      return sign + (decimal ? insertCommas(before) + decimal + after : insertCommas(before + after));
    }
  );
};

次のように jQuery プラグインで使用できます。

$.fn.addCommas = function() {
  $(this).each(function(){
    $(this).text(addCommas($(this).text()));
  });
};
于 2012-06-22T10:56:39.720 に答える
9

jquery FormatCurrencyプラグイン (私が作成したプラグイン) も参照してください。複数のロケールもサポートしていますが、必要のない通貨サポートのオーバーヘッドが発生する可能性があります。

$(this).formatCurrency({ symbol: '', roundToDecimalPlace: 0 });
于 2010-01-02T03:45:07.320 に答える
2
function formatNumberCapture () {
$('#input_id').on('keyup', function () {
    $(this).val(function(index, value) {
        return value
            .replace(/\D/g, "")
            .replace(/\B(?=(\d{3})+(?!\d))/g, ",")
            ;
    });
});

あなたはこれを試すことができます、それは私のために働きます

于 2020-07-17T14:02:08.357 に答える