"amount": 1234.56
我看到很多争论关于使用浮点数数据类型进行货币计算时缺乏精度和舍入误差的问题-然而,我们只是传输值,不是计算,所以这并不重要。
EventBrite的JSON货币规范类似于这样指定:
{
"currency": "USD",
"value": 432,
"display": "$4.32"
}
感谢您避免使用浮点数,但现在我们遇到了另一个问题:我们能够容纳的最大数字是多少?
一条评论(我不确定它是否正确,但似乎有道理)声称,在JSON中数字的实现因而最好你可以期望的是32位带符号整数。一个32位带符号整数可以容纳的最大值是2147483647。如果我们以次要单位表示价值,那就是21,474,836.47美元。2100万美元看起来像一个巨大的数字,但并非不能想象某些应用程序可能需要处理更大的价值。当货币的主要单位由1000个较小单位组成,或者该货币价值低于美元时,问题会变得更加严重。例如,突尼斯第纳尔分为1,000毫升。 2147483647毫升,或2147483.647 TND相当于$1,124,492.04人民币。在某些情况下,可能会使用超过100万美元的价值更加可能。另一个例子:越南盾的次货币已经被通货膨胀摧毁,所以让我们只使用主要单位。 2147483647 VND 相当于 $98,526.55。我相信许多用途(银行余额、房地产价值等)远高于此。(尽管EventBrite可能不必担心门票价格那么高!)
如果我们通过将价值以字符串形式传达来避免这个问题,应该如何格式化字符串?不同的国家/地区有着截然不同的格式——不同的货币符号,符号出现在金额之前或之后,符号和金额之间是否有空格,用逗号还是点来分隔小数,是否使用逗号作为千位分隔符,括号或负号表示负值,可能还有我不知道的其他因素。应用程序是否应该知道它正在使用哪种语言环境/货币,并像这样传达价值
"amount": "1234.56"
请反复确认并信任该应用程序能够正确格式化金额?(此外:是否应避免使用小数值,而是以最小货币单位指定值?或者应将主要和次要单位列在不同的属性中?)服务器是否应提供原始值和格式化值?
"amount": "1234.56"
"displayAmount": "$1,234.56"
我应该提供原始值和货币代码,让应用程序进行格式化吗?例如:"amount": "1234.56","currencyCode": "USD"。我假设无论哪种方法都应该在传输到和从服务器传输时使用。
我无法找到标准 - 你有答案或可以指向定义此问题的资源吗?这似乎是一个常见的问题。