2015-04-29 17 views
5

Tôi định dạng phao thành một chuỗi ngôn ngữ (Euro) và có các kết quả rất khác nhau trong mọi trình duyệt. Có thể sửa chữa mà không có chức năng riêng không?Số(). ToLocaleString() có định dạng khác nhau trong các trình duyệt khác nhau

var sum=2282.0000; 
var formated_sum = Number(sum.toFixed(2)).toLocaleString("de-DE", {style: "currency", currency: "EUR"}); 

Firefox kết quả: 2.282,00 €

Chrome kết quả: 2,282 €

IE kết quả: 2.282,00 €

Safari kết quả: 2282 €

Safari kết quả rất nhiều sai, kết quả chrome không quá tệ. Bất kỳ ý tưởng nào để khắc phục điều đó mà không cần viết một hàm riêng để định dạng?


Câu hỏi này có thể đã có một câu trả lời ở đây: hành vi không phù hợp của toLocaleString() trong trình duyệt khác nhau Không, câu hỏi của tôi là khác nhau, vì tôi đang tìm kiếm một giải pháp cho tiền tệ, không NGÀY

+1

Bạn có thể thử http://openexchangerates.github.io/accounting.js/ – Reeno

+3

Không có cách nào chính xác để trình duyệt triển khaiLocaleString, do đó có sự khác biệt về kết quả. Nhưng bạn vẫn không phải viết chức năng của riêng bạn, chỉ cần sử dụng một thư viện như DateJS – devnull69

+0

[Đây là thông số] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.7.4.3) về cơ bản nó nói lên trình duyệt, vì vậy bạn sẽ cần chức năng của riêng mình nếu bạn muốn có kết quả nhất quán. –

Trả lời

1

ECMA 262 xác định rằng hàm thực thi phụ thuộc và không có đối số.

Tạo giá trị chuỗi đại diện cho giá trị Số này được định dạng theo quy ước của ngôn ngữ hiện tại của môi trường máy chủ lưu trữ. 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 , để trả lại điều tương tự như toString.

CHÚ THÍCH Thông số đầu tiên cho chức năng này có thể được sử dụng trong phiên bản tương lai của tiêu chuẩn này ; đề xuất rằng việc triển khai không sử dụng vị trí thông số này cho bất kỳ mục đích nào khác.

Nó cũng là trong ECMA internationalization API specification (mà cho Number.prototype.toLocaleString thay ECMA 262 nhưng chấp nhận 2 đối số)

Định nghĩa này thay thế cho định nghĩa được cung cấp trong ES5, 15.7.4.3.

Khi phương pháp toLocaleString được gọi với đối số tùy chọn miền địa phương và các tùy chọn, các bước sau đây được thực hiện:

Cho x là giá trị này Số (theo quy định tại ES5, 15.7.4). Nếu ngôn ngữ là không được cung cấp, thì hãy đặt tên miền địa phương là không xác định. Nếu các tùy chọn không phải là được cung cấp, thì hãy để các tùy chọn không được xác định. Hãy để numberFormat là kết quả của việc tạo một đối tượng mới như thể bằng biểu thức mới Intl.NumberFormat (miền địa phương, tùy chọn) trong đó Intl.NumberFormat là hàm xây dựng dựng sẵn tiêu chuẩn được định nghĩa trong 11.1.3. Trả về kết quả của gọi hoạt động trừu tượng FormatNumber (được định nghĩa trong 11.3.2) với đối số numberFormat và x. Giá trị của các tài sản dài của phương pháp toLocaleString là 0.

Bên cạnh đó, quy định rằng mdn Safari không có người hỗ trợ cho nó.

Đối với một giải pháp khả thi thấy this answer trên SO

-3

Accounting.js như đã đề cập bởi Reeno là giải pháp! Cảm ơn Reeno!

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