Helpex - Trao đổi & giúp đỡ Đăng nhập
71

Có chức năng nào trong Javascript để định dạng số và chuỗi không?

Tôi đang tìm cách cho hàng nghìn dấu phân cách cho chuỗi hoặc số ... (Giống như String.Format In c #)

71 hữu ích 3 bình luận 149k xem chia sẻ
12 trả lời 12
108

Cập nhật (7 năm sau)

Các tài liệu tham khảo được trích dẫn trong câu trả lời ban đầu dưới đây là sai. được tích hợp sẵn chức năng cho điều này, đó là chính xác những gì kaiser gợi ý dưới đây:toLocaleString

Vì vậy, bạn có thể làm:

(1234567.89).toLocaleString('en')              // for numeric input
parseFloat("1234567.89").toLocaleString('en')  // for string input

Các chức năng được thực hiện dưới đây cũng hoạt động, nhưng đơn giản là không cần thiết.

(Tôi nghĩ có lẽ tôi đã gặp may mắn và phát hiện ra rằng điều đó cần thiết vào năm 2010, nhưng không. Theo tài liệu tham khảo đáng tin cậy hơn này , toLocaleString đã là một phần của tiêu chuẩn kể từ ECMAScript Phiên bản thứ 3 [1999], mà tôi tin rằng nó có nghĩa là sẽ được hỗ trợ từ IE 5.5 trở lại.)


Câu trả lời gốc

Theo tham chiếu này, không có chức năng tích hợp để thêm dấu phẩy vào một số. Nhưng trang đó bao gồm một ví dụ về cách tự viết mã:

function addCommas(nStr) {
    nStr += '';
    var x = nStr.split('.');
    var x1 = x[0];
    var x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
            x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}

Chỉnh sửa: Để đi theo cách khác (chuyển đổi chuỗi bằng dấu phẩy thành số), bạn có thể làm một cái gì đó như thế này:

parseFloat("1,234,567.89".replace(/,/g,''))
108 hữu ích 5 bình luận chia sẻ
120

Nếu là về nội địa hóa hàng ngàn dấu phân cách, dấu phân cách và dấu phân cách thập phân, hãy thực hiện theo các bước sau:

// --> numObj.toLocaleString( [locales [, options] ] )
parseInt( number ).toLocaleString();

Có một số tùy chọn bạn có thể sử dụng (và thậm chí cả các địa điểm có dự phòng):

number = 123456.7089;

result  = parseInt( number ).toLocaleString() + "<br>";
result += number.toLocaleString( 'de-DE' ) + "<br>";
result += number.toLocaleString( 'ar-EG' ) + "<br>";
result += number.toLocaleString( 'ja-JP', { 
  style           : 'currency',
  currency        : 'JPY',
  currencyDisplay : 'symbol',
  useGrouping     : true
} ) + "<br>";
result += number.toLocaleString( [ 'jav', 'en' ], { 
  localeMatcher            : 'lookup',
  style                    : 'decimal',
  minimumIntegerDigits     : 2,
  minimumFractionDigits    : 2,
  maximumFractionDigits    : 3,
  minimumSignificantDigits : 2,
  maximumSignificantDigits : 3
} ) + "<br>";

var el = document.getElementById( 'result' );
el.innerHTML = result;
<div id="result"></div>

Chi tiết trên trang thông tin MDN .

Chỉnh sửa: Bình luận viên @I như Serena thêm vào như sau:

Để hỗ trợ các trình duyệt có ngôn ngữ không phải tiếng Anh, nơi chúng tôi vẫn muốn định dạng tiếng Anh, hãy sử dụng value.toLocaleString('en'). Cũng hoạt động cho điểm nổi.

120 hữu ích 5 bình luận chia sẻ
27

Được cập nhật bằng cách sử dụng hỗ trợ nhìn phía sau phù hợp với các thay đổi của ECMAScript2018.
Để tương thích ngược, cuộn xuống dưới để xem giải pháp ban đầu.

Một biểu thức chính quy có thể được sử dụng - đặc biệt hữu ích trong việc xử lý các số lớn được lưu dưới dạng chuỗi.

const format = num => 
    String(num).replace(/(?<!\..*)(\d)(?=(?:\d{3})+(?:\.|$))/g, '$1,')

;[
    format(100),                           // "100"
    format(1000),                          // "1,000"
    format(1e10),                          // "10,000,000,000"  
    format(1000.001001),                   // "1,000.001001"
    format('100000000000000.001001001001') // "100,000,000,000,000.001001001001
]
    .forEach(n => console.log(n))

»Giải thích về biểu thức chính quy (regex101.com) Định dạng chuỗi phân tách / chuỗi Javascript?


Câu trả lời ban đầu này có thể không bắt buộc nhưng có thể được sử dụng để tương thích ngược.

Cố gắng xử lý vấn đề này bằng một biểu thức chính quy duy nhất (không gọi lại) khả năng hiện tại của tôi khiến tôi không có cái nhìn tiêu cực trong Javascript ... không bao giờ là một thay thế ngắn gọn khác hoạt động trong hầu hết các trường hợp chung - chiếm bất kỳ dấu thập phân nào bằng cách bỏ qua các trận đấu mà chỉ số của trận đấu xuất hiện sau chỉ mục của một khoảng thời gian.

const format = num => {
    const n = String(num),
          p = n.indexOf('.')
    return n.replace(
        /\d(?=(?:\d{3})+(?:\.|$))/g,
        (m, i) => p < 0 || i < p ? `${m},` : m
    )
}

;[
    format(100),                           // "100"
    format(1000),                          // "1,000"
    format(1e10),                          // "10,000,000,000"  
    format(1000.001001),                   // "1,000.001001"
    format('100000000000000.001001001001') // "100,000,000,000,000.001001001001
]
    .forEach(n => console.log(n))

»Giải thích về biểu thức chính quy (regex101.com)

Định dạng chuỗi phân tách / chuỗi Javascript?

27 hữu ích 1 bình luận chia sẻ
9

Có một plugin số jQuery đẹp: https://github.com/teamdf/jquery-number

Nó cho phép bạn thay đổi bất kỳ số nào theo định dạng bạn thích, với các tùy chọn cho chữ số thập phân và ký tự phân cách cho số thập phân và nghìn:

$.number(12345.4556, 2);          // -> 12,345.46
$.number(12345.4556, 3, ',', ' ') // -> 12 345,456

Bạn có thể sử dụng nó trực tiếp bên trong các trường đầu vào, đẹp hơn, sử dụng các tùy chọn tương tự như trên:

$("input").number(true, 2);

Hoặc bạn có thể áp dụng cho toàn bộ các thành phần DOM bằng cách sử dụng bộ chọn:

$('span.number').number(true, 2);
9 hữu ích 0 bình luận chia sẻ
4
// thousand separates a digit-only string using commas
// by element:  onkeyup = "ThousandSeparate(this)"
// by ID:       onkeyup = "ThousandSeparate('txt1','lbl1')"
function ThousandSeparate()
{
    if (arguments.length == 1)
    {
        var V = arguments[0].value;
        V = V.replace(/,/g,'');
        var R = new RegExp('(-?[0-9]+)([0-9]{3})'); 
        while(R.test(V))
        {
            V = V.replace(R, '$1,$2');
        }
        arguments[0].value = V;
    }
    else  if ( arguments.length == 2)
    {
        var V = document.getElementById(arguments[0]).value;
        var R = new RegExp('(-?[0-9]+)([0-9]{3})'); 
        while(R.test(V))
        {
            V = V.replace(R, '$1,$2');
        }
        document.getElementById(arguments[1]).innerHTML = V;
    }
    else return false;
}   
4 hữu ích 0 bình luận chia sẻ
4
var number = 35002343;

console.log(number.toLocaleString());

để tham khảo, bạn có thể kiểm tra tại đây https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

4 hữu ích 0 bình luận chia sẻ
3

Tôi sử dụng cái này:

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

nguồn: liên kết

3 hữu ích 1 bình luận chia sẻ
3

Bạn có thể sử dụng javascript. Dưới đây là mã, nó sẽ chỉ là acceptsố và mộtdot

đây là javascript

<script >

            function FormatCurrency(ctrl) {
                //Check if arrow keys are pressed - we want to allow navigation around textbox using arrow keys
                if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) {
                    return;
                }

                var val = ctrl.value;

                val = val.replace(/,/g, "")
                ctrl.value = "";
                val += '';
                x = val.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');
                }

                ctrl.value = x1 + x2;
            }

            function CheckNumeric() {
                return event.keyCode >= 48 && event.keyCode <= 57 || event.keyCode == 46;
            }

  </script>

HTML

<input type="text" onkeypress="return CheckNumeric()" onkeyup="FormatCurrency(this)" />

DEMO JSFIDDLE

3 hữu ích 0 bình luận chia sẻ
2
number = 123456.7089;
result = parseInt( number ).toLocaleString() + "<br>";
result = number.toLocaleString( 'pt-BR' ) + "<br>";

var el = document.getElementById( 'result' );
el.innerHTML = result;
<div id="result"></div>
2 hữu ích 1 bình luận chia sẻ
1

PHP.js có một chức năng để thực hiện việc này được gọi là number_format . Nếu bạn quen thuộc với PHP, nó hoạt động chính xác theo cùng một cách .

1 hữu ích 1 bình luận chia sẻ
1

Tất cả bạn cần làm chỉ là thực sự này :

123000.9123.toLocaleString()
//result will be "123,000.912"
1 hữu ích 1 bình luận chia sẻ
1

Tôi không thích bất kỳ câu trả lời nào ở đây, vì vậy tôi đã tạo ra một chức năng phù hợp với mình. Chỉ muốn chia sẻ trong trường hợp bất cứ ai khác thấy nó hữu ích.

function getFormattedCurrency(num) {
    num = num.toFixed(2)
    var cents = (num - Math.floor(num)).toFixed(2);
    return Math.floor(num).toLocaleString() + '.' + cents.split('.')[1];
}
1 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript string numbers format , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading