thêm dấu phẩy vào một số trong jQuery


82

Tôi có những con số này

109998094456

Và tất cả những gì tôi muốn làm là thêm dấu phẩy vào đúng vị trí nếu nó cần để nó trông như thế này

10,9998,094456

Tất cả đều nằm trong thẻ ap như thế này, <p class="points">10999</p>v.v.

Nó có thể được thực hiện?

Tôi đã thử nó ở đây với sự trợ giúp của các bài đăng khác http://jsfiddle.net/pdWTU/1/ nhưng dường như không thể làm cho nó hoạt động

Cảm ơn

Jamie

CẬP NHẬT

Lo lắng một chút và tìm ra nó tại đây http://jsfiddle.net/W5jwY/1/

Đi xem xét plugin Toàn cầu hóa mới để có cách thực hiện tốt hơn

Cảm ơn

Jamie


4
Câu hỏi liên quan ở đây: stackoverflow.com/questions/2901102/…
epascarello,

3
+1 cho trò chơi của bạn. Bạn nên đưa giải pháp của mình vào bản cập nhật của mình:<number string>.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')
zhon

2
Tôi ước tôi có thể +100 cho giải pháp của bạn: Regex nói Không phải ranh giới từ, theo sau là một cái nhìn tích cực về phía trước 3 chữ số có thể được lặp lại không theo sau bởi một chữ số. Tuyệt vời!
zhon

Giải pháp này là tốt nhất cho hầu hết các phần, nhưng không hoàn toàn phù hợp với tôi. Thật không may, tôi cần hiển thị các số có 4 và đôi khi là 5 chữ số thập phân. Những người tôi làm việc đối phó với số lượng giao dịch cao và các phần nhỏ của một xu cộng lại lên đến $ 100 hoặc $ 1000 đô la (hãy nghĩ đến Office Space). Tôi chỉ tát một số mã trên fiddle của bạn để cho phép nó để xử lý chữ số thập phân qua 3: http://jsfiddle.net/W5jwY/554/
Josh Bilderback

Câu trả lời thực sự cho câu hỏi này ở đây: stackoverflow.com/a/2632502/1860982
Tosin Onikute

Câu trả lời:


138

Hoạt động trên tất cả các trình duyệt, đây là tất cả những gì bạn cần.

  function commaSeparateNumber(val){
    while (/(\d+)(\d{3})/.test(val.toString())){
      val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
    }
    return val;
  }

Bài viết này được viết ngắn gọn và chính xác, nhờ vào regex. Đây là JS đơn giản, nhưng bạn có thể sử dụng nó trong jQuery của mình như sau:

$('#elementID').html(commaSeparateNumber(1234567890));

hoặc là

$('#inputID').val(commaSeparateNumber(1234567890));

4
câu trả lời của user1655655 là cách tốt hơn
Pyrolistical

10
Tôi thích rùa!
Timothy Perez

7
Hai vấn đề với câu trả lời này: 1. Gọi hàm nhiều hơn một lần với cùng một giá trị sẽ dẫn đến dấu phẩy ở vị trí sai (ví dụ: sự kiện keyup). 2. Hàm này không xử lý đúng số thập phân và sẽ thêm dấu phẩy vào bên trong số thập phân. Xem JSFiddle này để biết phiên bản sửa đổi khắc phục cả hai.
baacke

1
@baacke Ý tưởng của hàm này là mỏng, vì vậy tôi đã không tính đến việc gọi nó hai lần trên cùng một var hoặc decimals (vì nó không có trong câu hỏi). Dù bằng cách nào, ví dụ fiddle của bạn rất hữu ích cho những trường hợp bạn cần một số thập phân, vì vậy cảm ơn bạn.
Timothy Perez

Vị trí dấu phẩy hoặc dấu chấm xuất hiện được xác định theo ngôn ngữ. Thư viện chuẩn JS đã có thể làm điều này cho bạn. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Alex Harvey

130
Number(10000).toLocaleString('en');  // "10,000"

6
Đây là giải pháp đơn giản nhất và nó hoạt động hoàn hảo đối với tôi. Cảm ơn bạn!
ahgood

3
cảm ơn bạn vì gợi ý đó, tốt hơn nhiều so với việc viết các hàm tùy chỉnh hoặc bao gồm một plugin. cho tôi câu trả lời # 1!
linqu 19/1213

5
Điều này thật tuyệt và hoạt động trên hầu hết các trình duyệt máy tính để bàn, nhưng hãy cẩn thận vì nó hỗ trợ hạn chế trong các trình duyệt di động ngay bây giờ ... developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Luke

2
Đối với bất cứ ai tìm cách để sử dụng điều này với Node.js, nó sẽ không làm việc trừ khi bạn lập lại động cơ v8 để bao gồm i18n: stackoverflow.com/questions/23571043/...
Tom Spencer

3
Điều này không nhất quán trên các trình duyệt và hoàn toàn không hoạt động trên iPad.
Isaac Askew

3

Câu trả lời của Timothy Pirez rất đúng nhưng nếu bạn cần thay thế các số bằng dấu phẩy Ngay lập tức khi người dùng nhập vào trường văn bản, bạn có thể muốn sử dụng chức năng Keyup.

      $('#textfield').live('keyup', function (event) {
        var value=$('#textfield').val();

      if(event.which >= 37 && event.which <= 40){
          event.preventDefault();
      }
      var newvalue=value.replace(/,/g, '');   
      var valuewithcomma=Number(newvalue).toLocaleString('en');   
      $('#textfield').val(valuewithcomma); 

      });

    <form><input type="text" id="textfield" ></form>


1

Hãy xem Numeral.js . Nó có thể định dạng số, tiền tệ, tỷ lệ phần trăm và có hỗ trợ bản địa hóa.


1
    function delimitNumbers(str) {
      return (str + "").replace(/\b(\d+)((\.\d+)*)\b/g, function(a, b, c) {
        return (b.charAt(0) > 0 && !(c || ".").lastIndexOf(".") ? b.replace(/(\d)(?=(\d{3})+$)/g, "$1,") : b) + c;
      });
    }

    alert(delimitNumbers(1234567890));


0

Sử dụng tham chiếu toLocaleString tại https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

function formatComma(value, sep = 0) {
      return Number(value).toLocaleString("ja-JP", { style: "currency", currency: "JPY", minimumFractionDigits: sep });
    }
console.log(formatComma(123456789, 2)); // ¥123,456,789.00
console.log(formatComma(123456789, 0)); // ¥123,456,789
console.log(formatComma(1234, 0)); // ¥1,234


-1

Cách tiếp cận khác:

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;
}
var a  = addCommas(10000.00);
alert(a);

Một plugin tuyệt vời khác: http://www.teamdf.com/web/jquery-number-format/178/


-1

Một cách khác để làm điều đó:

function addCommas(n){
  var s = "",
      r;

  while (n) {
    r = n % 1000;
    s = r + s;
    n = (n - r)/1000;
    s = (n ? "," : "") + s;
  }

  return s;
}

alert(addCommas(12345678));

-1

Đây là phiên bản coffeescript của tôi về fiddle của @ baacke được cung cấp trong một nhận xét cho @Timothy Perez

class Helpers
    @intComma: (number) ->
        # remove any existing commas
        comma = /,/g
        val = number.toString().replace comma, ''

        # separate the decimals
        valSplit = val.split '.'

        integer = valSplit[0].toString()
        expression = /(\d+)(\d{3})/
        while expression.test(integer)
            withComma = "$1,$2"
            integer = integer.toString().replace expression, withComma

        # recombine with decimals if any
        val = integer
        if valSplit.length == 2
            val = "#{val}.#{valSplit[1]}"

        return val
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.