currency - 如何在 API 中定义金额

标签 currency

我将创建一个包含金额的 API。我想知道最佳实践是什么,或者是否有人对某些格式有好的或坏的体验。

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

我看到了以下两种可能性:

  1. 以字符串形式发送金额,如下所示:“5.85”(带有基本单位的字符串)
  2. 以次要单位发送金额:585(以次要单位表示金额的整数)

我在这两者之间来回走动。因此,我出去检查了其他 API 使用的内容,并得出了以下列表:

  • Stripe:带小单位的整数
  • Braintree:带有基本单位的字符串
  • Google 电子钱包:带基本单位的字符串
  • Paypal:带有基本单位的字符串
  • Amazon Payments:带有基本单位的字符串
  • 货币云:带有基本单位的字符串
  • 2checkout:带有基本单位的字符串
  • Adyen:带有小单位的整数
  • Dwolla:带有基本单位的十进制
  • GotoBilling:奇怪的启发式! “金额的格式可以包含或不包含小数。如果没有给出小数,则假定为两 (2) 位小数 (1.00 = 100)”
  • GoCardless:带有基本单位的字符串
  • Intuit:请求中带有基本单位的十进制,响应中带有基本单位的字符串
  • Klarna:带有小单位的整数
  • MasterCard:带有小单位的整数
  • Paynova:带有基本单位的字符串
  • Rogers Catalyst:带有基本单位的字符串
  • WePay:带有基本单位的字符串
  • Venmo:带基本单位的十进制

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

我个人对解析像“8.20”这样的字符串感到不舒服,因为如果你解析这个字符串,如果你错误地使用了 float ,它就会变成“8.19999999...”。所以我倾向于只发送整数。但我不认为这是一个很好的论点,而且我发现 API 通常倾向于使用基本单位作为字符串。

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

最佳答案

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

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

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

关于currency - 如何在 API 中定义金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341337/

相关文章:

php - 根据 Woocommerce 中的产品类别更改货币符号

jquery - 将 $ 符号添加到 Jquery Mobile Slider

sharepoint - BDC 字段的格式

php - 将数字分解为数千、数百等

java - 没有获取特定语言环境的货币符号

java 获取价格和符号

java - 在 JavaFX 中将 double 类型值从变量更改为字符串/文本输出?

ruby-on-rails - 在 Ruby on Rails 中处理国际货币输入

ios - 如何将 UILabel 的输出格式化为货币?

c++ - System::Currency 和 C++ Builder