用什么类型来正确处理奇数分的分数? (或任何货币的最小单位)

时间:2015-08-03 01:12:02

标签: go rounding currency

大多数时候,我认为建议将金钱作为最基本的单位;并使用64位无符号整数来提供最大容量。

从表面上看,这似乎没什么问题,但是我想要拆分1美分呢?

在Java / Scala中,BigDecimal类型,我也看到建议用于处理金钱,将跟踪分数,0.01 / 2 = 0.005

但除以64位无符号整数,1/2 = 0

我试图写一些处理钱的Go,想知道要使用哪种类型(只需使用uint64或者找其他的东西?)。

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以将big.Rat用于任意大小的有理数。然后,您可以将数量分配到心脏的内容,而不会失去任何精确度。

答案 1 :(得分:3)

int64(或uint64)仍可用于表示分数的货币金额。例如。如果您想要使用的最低金额为0.01美分,那么您可以将1分为100,那么半分为50和{{1}一分钱将1/100。这种表示非常有效(从性能和内存使用的角度来看),但不是很灵活。需要注意的是:

  • 您可以使用此方法表示最大值(1美分
  • 如果最大精度更改
  • ,则需要对应用及其存储的数据进行更改
  • 所有算术运算都需要仔细考虑并考虑到考虑因素