Unidad de Fomento (CLF/UF) 和金钱 gem

Unidad de Fomento (CLF/UF) and money gem

我一直在努力理解 money gem 如何格式化 Unidad de Fomento。我测试了 6.56.7 版本,两者似乎都呈现奇怪的格式:

# Money 6.5

usd = Money.new(243, 'USD')
usd.to_f #=> 2.43
usd.format #=> ".43"

clf = Money.new(243, 'CLF')
clf.to_f #=> 243
clf.format #=> "CLF243"

# Money 6.7

usd = Money.new(243, 'USD')
usd.to_f #=> 2.43
usd.format #=> ".43"

clf = Money.new(243, 'CLF')
clf.to_f #=> 0.0243
clf.format #=> "CLF0.0243"

是本该如此还是bug?

这是版本 6.6 引入的有意更改。 请参阅 GitHub 上的 changelog and the commit。不幸的是,没有关于为什么这样做的提示。

好的,我想我明白了。我是个傻瓜,认为我们生活在一个像美元或欧元这样的美分世界(以 10 为底的指数 2,10^2 cents 等于 1 个货币单位)。有许多货币没有任何一种次要货币,例如日元 (JPY),也有根本没有以 10 为基数的货币。维基百科的这篇文章解释得很好:https://en.wikipedia.org/wiki/ISO_4217

因此,在我的示例中,CLF 似乎很久以前是一种指数为 0 的货币,因此它没有任何类型的次要货币。 2.34 是无效金额,因此 money 将其转换为 234。ISO 更改,然后 CLF 转换为指数为 4 的货币。

money 问题跟踪器上的这条评论解决了我的问题:https://github.com/RubyMoney/money/issues/614#issuecomment-194813943