货币换算的工作方式

使用汇率换算金额,处理相反方向,并区分参考换算结果和扣除费用后的支付金额。

一头白色独角鲸站在小型兑换柜台旁,柜台上有两个不同的货币代币。

计算前先写出单位

先确定已有金额、目标货币和汇率方向。在这个示例中,源货币为 EUR,目标货币为 USD,汇率为每 EUR 兑换 1.08765 USD。这是用于演示计算的虚构汇率。

EUR 到 USD 的示例换算
Source amount:       250.00 EUR
Rate:                1.08765 USD/EUR
Unrounded result:    271.91250 USD
Two-decimal result:  271.91 USD

如果汇率指向相反方向,就用除法

如果你有 USD 250,而唯一可用的报价是每 EUR 兑换 1.25 USD,就用 250 除以 1.25,得到 EUR 200。此时相乘会算错换算方向。

一个快速的合理性检查可以发现许多方向错误:按这个示例汇率,一欧元的价值高于一美元,因此欧元金额应小于美元金额。

从 Narwhal 请求换算

换算端点接收 from、to 和正的十进制金额。两种货币必须不同。它返回输入金额、选定汇率、换算金额、时间戳、过时状态和市场交易时段。实际响应取决于请求时已接受的观测值。

将 USD 100 换算为 JPY
curl --request GET \
  --url "https://api.narwhalapi.com/v1/fx/convert?from=USD&to=JPY&amount=100.00" \
  --header "Authorization: Bearer $NARWHAL_API_KEY"

分开处理计算金额和支付金额

参考换算可用于比较或展示。支付服务实际交付的金额可能不同,因为它采用自己的汇率、费用和舍入规则。例如,ECB 将其参考汇率标为仅供参考,并不鼓励将其用于交易。

以下是一个明确在换算前从源货币扣除费用的示例费用计算。换算后收取费用需要使用不同的公式。

费用处理示例,不是 API 结果
Source balance:             100.00 USD
Fee deducted before FX:        2.00 USD
Amount actually converted:    98.00 USD
Provider rate:                 0.90 EUR/USD
Recipient amount:             88.20 EUR

只舍入一次结果

Narwhal 的换算规范使用十进制运算,并采用银行家舍入法,舍入至目标货币 ISO 4217 的最小单位。汇率精度和货币金额精度用途不同:不要先将汇率的小数位数缩减到金额所用的位数。

请将返回的汇率和换算金额一起保留。使用为显示而舍入后的汇率重新计算,可能会与 API 结果出现明显差异。

验证输入并保存结果上下文

将换算结果展示为当前数据前,请检查返回的时间戳和 stale 标志。请求成功并不表示汇率是在你点击的那一刻观测到的。

  • 发送未格式化的十进制字符串,不要发送带货币符号或千位分隔符的数字。
  • 计算前确认源货币和目标货币的代码。
  • 将不支持的货币和无效金额作为错误处理;不要用 1 作为替代汇率。
  • 需要复现结果时,保存金额、选定汇率、换算结果和观测时的相关信息。

来源与参考

发布于 。最近核查于 。