Golang:如何将float64货币表示形式转换为最小面额? (乘以100并不适用于所有货币)

时间:2018-10-06 01:04:42

标签: go floating-point type-conversion decimal currency

我正在处理float64货币表示形式。例如,usd的2.9代表$ 2.90,所以如果我需要将其转换为该货币的最低面额,我只需乘以100(2.9 * 100 = 290美分)即可。

这适用于大多数主要货币。但是,例如在日本,float64表示形式将没有小数,因为Yen已经是最低的表示形式。如果我得到float64(290)日元,如果我试图获得最小面额,则乘以100会得到过量的日元-应该保持不变。

当某些货币乘以100时,除特殊大小写外,什么是最好的处理方式?

编辑:我掌握的两条信息是浮点表示法和ISO货币代码。

1 个答案:

答案 0 :(得分:7)

请勿将浮点数用于金钱。浮点数是一个近似值。 search_synonyms(所有IEEE-754 64位浮点数的集合)符合IEEE浮点算术标准(IEEE 754)。

维基百科:IEEE 754


使用ISO 4217标准确定次要货币单位指数。大多数货币为2(10²= 100),日元(JPY)为0(10⁰= 1)。

维基百科:ISO 4217

Current currency & funds code list