相关疑难解决方法(0)

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

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

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

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

floating-point json

12
推荐指数
3
解决办法
2183
查看次数

如何在API中定义金额

我打算创建一个包含金额的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倾向于将基本单位作为字符串.

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

currency

11
推荐指数
1
解决办法
1426
查看次数

定义 JSON 模式货币类型

我正在尝试为属性定义 JSON 模式

money: 12.12
Run Code Online (Sandbox Code Playgroud)

我主要关心的是应该允许最多 2 个小数位。我最初定义这个领域的尝试是

money: {
  type: 'number',
  minimum: 0,
  multipleOf: 0.01
}
Run Code Online (Sandbox Code Playgroud)

然而,由于浮点不精确,这失败了。例如,使用 tv4 验证器,数字 147.41 通过验证,但 147.42 失败。是否有另一种方法来定义最多只允许 2 个小数位的数字类型?

似乎“格式”属性的目的是实现这些类型的限制,但如果我像这样定义字段:

money: {
  type: 'number',
  format: 'currency',
  minimum: 0
}
Run Code Online (Sandbox Code Playgroud)

那么如何指定具有“货币”格式的字段最多只允许 2 个小数位?

validation json jsonschema

3
推荐指数
1
解决办法
4601
查看次数

标签 统计

json ×2

currency ×1

floating-point ×1

jsonschema ×1

validation ×1