2013-04-22 29 views
7

tôi đã chức năng này rất đơn giản:toLocaleString() không được hỗ trợ trong tất cả các trình duyệt?

Chrome, Firefox, IE:

Number(1000000).toLocaleString() 
"1 000 000" // in french system, the space is the separator instead of the comma 

Opera, Maxthon:

Number(1000000).toLocaleString() 
"1000000" 

tại sao Opera và Maxthon không thể định dạng nó? họ hỗ trợ phương pháp này nhưng không thực hiện nó đúng cách?

có thay thế toLocaleString() nào không?

+1

Chỉ cần chỉ ra rằng bạn cũng không nên hy vọng sản lượng đồng đều giữa các người dùng của bạn 'Số (1000000) .toLocaleString(); 'mang lại cho tôi' "1.000.000" '(Google Chrome, en-GB). Xem [** trang MDN **] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toLocaleString) để biết thông số nào cần thực hiện và trong đó các trình duyệt được hỗ trợ . –

+0

@PaulS. xin lỗi, quên chính xác rằng tôi sử dụng hệ điều hành tiếng Pháp, và trong hệ thống tiếng Pháp, việc tách được thực hiện bằng cách sử dụng một không gian thay vì dấu phẩy –

+0

có vẻ như nó cũng không có trong Chrome! xin lỗi vì tôi nghĩ rằng một phương pháp PHẢI trả lại luôn luôn một kết quả nếu nó ở đó! –

Trả lời

3

Các language spec rời khỏi định nghĩa rất ngỏ:

15.7.4.3 Number.prototype.toLocaleString()

Tạo một giá trị String đại diện Số giá trị này được định dạng theo các công ước của miền địa phương hiện tại môi trường máy chủ. Chức năng này phụ thuộc vào việc triển khai thực hiện và được phép, nhưng không được khuyến khích, để nó trả về cùng một thứ như toString.

Các trình duyệt khác nhau được phép thực hiện theo cách khác và có thể triển khai khác nhau dựa trên ngôn ngữ được người dùng chọn.

+0

vì vậy tôi không có thay thế trực tiếp? tôi phải lập trình định dạng hoặc sử dụng thư viện bên ngoài? –

+1

@AbdelouahabPp, Nếu bạn cần định dạng số giống hệt nhau trên tất cả các trình duyệt, thì có, bạn cần phải tránh các hàm phụ thuộc vào triển khai thực hiện. –

+0

ah cảm ơn bạn, hy vọng họ sẽ thực hiện nó như bị xóa khỏi danh sách đó;) –

9

Kết quả cũng sẽ khác nhau tùy thuộc vào cài đặt ngôn ngữ của người dùng, ngay cả khi Number.prototype.toLocaleString được trình duyệt của họ hỗ trợ, ví dụ: cho tôi trên vi-GB, Number(1000000).toLocaleString(); cho tôi "1,000,000".

có thay thế toLocaleString() nào không?

Tại sao không viết một để làm chính xác những gì bạn muốn? Ví dụ,

function localeString(x, sep, grp) { 
    var sx = (''+x).split('.'), s = '', i, j; 
    sep || (sep = ' '); // default seperator 
    grp || grp === 0 || (grp = 3); // default grouping 
    i = sx[0].length; 
    while (i > grp) { 
     j = i - grp; 
     s = sep + sx[0].slice(j, i) + s; 
     i = j; 
    } 
    s = sx[0].slice(0, i) + s; 
    sx[0] = s; 
    return sx.join('.'); 
} 

Bây giờ

localeString(1000000.00001); 
// "1 000 000.00001" 
+0

ah! điều đó sẽ thực hiện công việc! cảm ơn bạn –

+0

vì am đến từ python, tôi nghĩ rằng nó đã được đơn giản, metho là để đảo ngược các stringm forat nó, sau đó lại đảo ngược nó .... nhưng nó sẽ làm cho rất nhiều dòng!trong python nếu bạn muốn đảo ngược một chuỗi, bạn chỉ cần tạo một bước âm, '" hello "[:: - 1]' và phần tử mới nhất là phần tử âm, ví dụ 'o' sẽ là' "hello" [ -1] 'thực sự thế giới là khó khăn từ một ai đó đến từ python;) thnk bạn một lần nữa –

+2

' 'abc'.split (' '). Reverse(). Join (' ') 'là'' cba'', nhưng bạn vẫn sẽ cần phải lặp lại nó như thế này. Chỉ cần vòng xuống để thay thế. Hơn nữa, ''abc'.slice (-1)' là '' c''. –

Các vấn đề liên quan