我一直在努力理解money
gem如何格式化Unidad de Fomento。我已经测试了6.5
和6.7
版本,两者似乎都呈现奇怪的格式:
# Money 6.5
usd = Money.new(243, 'USD')
usd.to_f #=> 2.43
usd.format #=> "$2.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 #=> "$2.43"
clf = Money.new(243, 'CLF')
clf.to_f #=> 0.0243
clf.format #=> "CLF0.0243"
字符串
这是注定的,还是一个bug?
3条答案
按热度按时间lkaoscv71#
这是在6.6版本中引入的故意更改。查看GitHub上的changelog和commit。不幸的是,没有任何线索说明为什么这样做。
r9f1avp52#
好的,我想我明白了。我是一个傻瓜,认为我们生活在一个像美元或欧元这样的美分世界(以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-194813943c86crjj03#
货币>= 6.6:
字符串