如何在API中定义金额

alv*_*lvi 11 currency

我打算创建一个包含金额的API.我想知道最佳做法是什么,或者某人是否对某些格式有一些好的或坏的经历.

  • 我们应该传输基本单位还是小单位?(金额与amount_cents)
  • 我们应该将数字表示为整数/小数或字符串吗?

我见过以下两种可能性:

  1. 像这样的字符串发送金额:"5.85"(带基本单位的字符串)
  2. 以次要单位发送金额:585(表示次要单位金额的整数)

我要在这两者之间来回走动.所以我出去查看其他API使用的内容,并提出以下列表:

  • 条带:具有次要单位的整数
  • Braintree:带基本单位的字符串
  • Google电子钱包:包含基本单元的字符串
  • Paypal:带基本单位的字符串
  • 亚马逊支付:基本单位的字符串
  • 货币云:包含基本单位的字符串
  • 2checkout:带基本单位的字符串
  • Adyen:具有次要单位的整数
  • Dwolla:带基本单位的小数
  • GotoBilling:奇怪的启发式!"可以使用或不使用小数格式化数量.如果没有给出小数,则假设两(2)个小数位(1.00 = 100)"
  • GoCardless:带基本单位的字符串
  • Intuit:请求中带有基本单位的十进制数,带有响应中基本单位的字符串
  • Klarna:具有次要单位的整数
  • 万事达卡:具有次要单位的整数
  • Paynova:基本单位的字符串
  • Rogers Catalyst:带基本单元的字符串
  • WePay:带基本单位的字符串
  • Venmo:带基本单位的小数

因此,在18个采样的API中,4个使用次要单位,13个使用基本单位,1个使用难以理解的混合物.在13个使用基本单位的人中,10个是以引用的字符串形式传输它们,3个是不带引号的小数字(如果你看Intuit则实际为2个半).

我个人觉得不得不解析像"8.20"之类的字符串,因为如果你解析它会变成"8.19999999 ......"如果你错误地使用了浮点数.所以我倾向于只发送整数.但我不认为这是一个很好的论点,我发现通常API倾向于将基本单位作为字符串.

你对每种格式有什么好的论据吗?

gia*_*gia 1

整数会吃掉点,那就少了一个字节:D 整数将有一个 max_int,你有足够富有的人可能会溢出吗?

将货币字符串解析为浮点数的人无论如何都会将 int 转换为浮点数。

如果发送二进制数据,整数将比字符串小得多。如果您无论如何发送 xml,您也可以将其定义为一个字符串(该文件可能在发送之前被压缩,对吧?),尝试将其设置为“货币”类型,而不是将其列为完整字符串。