Unidad de Fomento (CLF/UF) 和金钱 gem
Unidad de Fomento (CLF/UF) and money gem
我一直在努力理解 money
gem 如何格式化 Unidad de Fomento。我测试了 6.5
和 6.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
我一直在努力理解 money
gem 如何格式化 Unidad de Fomento。我测试了 6.5
和 6.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