在数据库中存储货币/货币价值,在服务器端应用程序中处理它们,最后通过 JSON API 将它们发送到浏览器的最佳实践是什么?
我想出了两种方法,但我不确定如何权衡利弊:
以最小货币单位将值存储为整数
- 基本上这意味着数据库将以美分/派斯/先令/等为单位存储货币价值。
- 服务器端应用程序将此值映射到常规整数变量。
- JSON API 将值表示为常规 JSON 数字。
- 这种方法的缺点是在向用户显示货币值之前必须不断地除以 100,并且在存储任何用户输入之前总是乘以 100。
- 可能的陷阱:你如何定义最小的货币单位?它是基于两位小数还是四位?是否有任何货币没有 100:1 的比率,即 100 美分 = 1 美元。
将值存储为具有固定精度和比例的十进制/数字
- DB 将货币值存储为具有固定精度和比例的小数/数字类型,例如。数字(10,2)
- 服务器端应用程序将这些映射到特殊对象,这些对象可以保持计算的精度和规模,例如。
BigDecimal
在红宝石。 - JSON API 将这些值交换为字符串而不是数字。因为数字会被 JSON 解析器自动解析为浮点数,从而导致精度损失。
- 这种方法的缺点是服务器端的所有计算都需要在盒装数据类型中进行(可能更慢),并且 JSON 解析器需要意识到某些字符串实际上不是字符串,而是数字的事实价值观。
- 这样做的好处是您不需要不断地乘以和除以 100。
是否有普遍接受的最佳实践?