Ghi nhớ các quirks khác nhau của các loại dữ liệu và nội địa hóa, cách tốt nhất để một dịch vụ web truyền đạt các giá trị tiền tệ đến và từ các ứng dụng là gì? Có một tiêu chuẩn nào đó không?Tiêu chuẩn để định dạng các giá trị tiền tệ trong JSON là gì?
Suy nghĩ đầu tiên của tôi là chỉ cần sử dụng loại số. Ví dụ
"amount": 1234.56
Tôi đã thấy nhiều tranh luận về các vấn đề với một thiếu chính xác và làm tròn lỗi khi sử dụng điểm kiểu dữ liệu để tính toán tiền tệ nổi - tuy nhiên, chúng tôi chỉ truyền tải những giá trị, không tính toán, vì vậy shouldn rằng không quan trọng.
EventBrite's JSON currency specifications chỉ định một cái gì đó như thế này:
{
"currency": "USD",
"value": 432,
"display": "$4.32"
}
Bravo để tránh các giá trị dấu chấm động, nhưng bây giờ chúng tôi chạy vào một vấn đề khác: số lượng lớn nhất chúng ta có thể giữ những gì?
One comment (Tôi không biết đó là sự thật, nhưng có vẻ hợp lý) cho rằng, vì việc triển khai số khác nhau trong JSON, tốt nhất bạn có thể mong đợi là số nguyên có ký 32 bit. Giá trị lớn nhất mà số nguyên có dấu 32 bit có thể giữ là 2147483647. Nếu chúng tôi biểu thị các giá trị trong đơn vị vị thành niên, đó là $ 21,474,836,47. $ 21 triệu có vẻ như một con số khổng lồ, nhưng không thể tưởng tượng được rằng một số ứng dụng có thể cần phải làm việc với một giá trị lớn hơn. Vấn đề trở nên tồi tệ hơn với các đơn vị tiền tệ nơi 1.000 đơn vị nhỏ làm cho một đơn vị lớn, hoặc nơi tiền tệ có giá trị nhỏ hơn đô la Mỹ. Ví dụ, Dinar Tunisia được chia thành 1.000 milim. 2147483647 milim, hoặc 2147483.647 TND là $ 1,124,492.04. Thậm chí một số trường hợp có thể có giá trị hơn 1 triệu đô la trong một số trường hợp. Một ví dụ khác: các tiểu đơn vị của đồng Việt Nam đã trở nên vô dụng bởi lạm phát, vì vậy hãy sử dụng các đơn vị lớn. 2147483647 VND là $ 98,526.55. Tôi chắc chắn nhiều trường hợp sử dụng (số dư ngân hàng, giá trị bất động sản, v.v.) cao hơn đáng kể. (EventBrite có thể không phải lo lắng về giá vé cao như vậy!)
Nếu chúng ta tránh vấn đề đó bằng cách giao tiếp giá trị dưới dạng chuỗi, chuỗi nên được định dạng như thế nào? Các quốc gia/miền địa phương khác nhau có định dạng khác nhau — các ký hiệu tiền tệ khác nhau, cho dù biểu tượng xảy ra trước hoặc sau số tiền, có hay không có khoảng cách giữa ký hiệu và số tiền, nếu dấu phẩy hoặc dấu chấm được sử dụng để tách số thập phân. được sử dụng làm dấu tách hàng nghìn, dấu ngoặc đơn hoặc dấu trừ để biểu thị các giá trị âm và có thể nhiều hơn nữa mà tôi không biết.
ứng dụng nên biết những gì ngôn ngữ/tiền nó làm việc với, trao đổi các giá trị như
"amount": "1234.56"
qua lại, và tin tưởng ứng dụng để định dạng một cách chính xác số tiền? (Ngoài ra: nên tránh giá trị thập phân và giá trị được chỉ định theo đơn vị tiền tệ nhỏ nhất? Hoặc đơn vị lớn và nhỏ được liệt kê trong các thuộc tính khác nhau?)
Hoặc máy chủ nên cung cấp giá trị thô và giá trị được định dạng?
"amount": "1234.56"
"displayAmount": "$1,234.56"
Hoặc máy chủ có cung cấp giá trị thô và mã đơn vị tiền tệ và để ứng dụng định dạng không? "số tiền": "1234.56" "currencyCode": "USD" Tôi giả sử phương pháp nào được sử dụng nên được sử dụng theo cả hai hướng, truyền đến và từ máy chủ.
Tôi không thể tìm thấy tiêu chuẩn - bạn có câu trả lời hay không hoặc có thể chỉ cho tôi tài nguyên xác định điều này? Nó có vẻ như là một vấn đề phổ biến.
câu hỏi liên quan: https: //stackoverflow.com/questions/45222706/what-are-the-best-practices-passing-dollar-amounts-in-json –