gpt4 book ai didi

json - 在 JSON 中传递美元金额的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-04 00:41:11 24 4
gpt4 key购买 nike

在 JSON 中传递美元金额的最佳实践是什么?

将金额作为字符串或浮点数传递?或其他?

我们有点担心客户端(iOS/Android/Web)上显示的舍入错误,或者一个客户端上显示的值可能与另一个不同。

最佳答案

Effective Java,第 2 版 Joshua Bloch 说

float 和 double 类型特别不适合货币计算,因为不可能将 0.1(或任何其他 10 的负幂)精确表示为 float 或 double。

例如,假设您有 1.03 美元并花费 42c。你还剩多少钱?

System.out.println(1.03 - .42);
打印出 0.6100000000000001。

解决这个问题的正确方法是使用 BigDecimal、int 或 long。

永远不要在浮点变量中保存货币值(value)。浮点数不适合货币使用,无论是定点值还是十进制值。

最好以几种不同的格式提供货币代码和相同的值。考虑这个典型的响应量为 0.00234

"amount": {
"currency": "USD",
"decimal": 0.00234,
"integer": 234000,
"integer_scale": 8,
"pretty": "\u0e3f 0.00234 BTC",
"string": "0.00234"
}

您可以选择使用任何提供的数字格式。

十进制:这是一个十进制数
字符串:与十进制相同但被引用,因此您的 JSON 库认为它是一个字符串。
漂亮:准备向用户显示的字符串。包括适当的货币符号和货币代码。
货币:货币的 3 个字母代码。

以下是两个示例 API:

1 - JSON 中的通用货币代码

{
"USD": {
"symbol": "$",
"name": "US Dollar",
"symbol_native": "$",
"decimal_digits": 2,
"rounding": 0,
"code": "USD",
"name_plural": "US dollars"
},
"CAD": {
"symbol": "CA$",
"name": "Canadian Dollar",
"symbol_native": "$",
"decimal_digits": 2,
"rounding": 0,
"code": "CAD",
"name_plural": "Canadian dollars"
},
"EUR": {
"symbol": "€",
"name": "Euro",
"symbol_native": "€",
"decimal_digits": 2,
"rounding": 0,
"code": "EUR",
"name_plural": "euros"
}
}

https://gist.github.com/Fluidbyte/2973986

2 - 固定器 API

http://api.fixer.io/latest

{
"base": "EUR",
"date": "2017-07-28",
"rates": {
"AUD": 1.4732,
"BGN": 1.9558,
"BRL": 3.7015,
"CAD": 1.4712,
"CHF": 1.1357,
"CNY": 7.9087,
"CZK": 26.048,
"DKK": 7.4364,
"GBP": 0.89568,
"HKD": 9.1613,
"HRK": 7.412,
"HUF": 304.93,
"IDR": 15639,
"ILS": 4.1765,
"INR": 75.256,
"JPY": 130.37,
"KRW": 1317.6,
"MXN": 20.809,
"MYR": 5.0229,
"NOK": 9.3195,
"NZD": 1.5694,
"PHP": 59.207,
"PLN": 4.2493,
"RON": 4.558,
"RUB": 69.832,
"SEK": 9.5355,
"SGD": 1.5947,
"THB": 39.146,
"TRY": 4.1462,
"USD": 1.1729,
"ZAR": 15.281
}
}

What is the standard for formatting currency values in JSON?

关于json - 在 JSON 中传递美元金额的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45222706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com