这是我将本地货币转换为EUR
的代码price_eur = price.to_i / 3.4528
price_eur = price_eur.round(2)
问题是,如果price=0.8
,我得到结果price_eur=0.0
,为什么?
如何使它成为0.80
(正确值且始终为零)?
答案 0 :(得分:1)
因为0.8.to_i
是0
。
这是不可能的。
答案 1 :(得分:1)
to_i
向下舍入到最接近的整数 - 因此0.8.to_i
为零。然后零以上其他任何东西都保持为零。
您不能使用整数 - 使用浮点数。 price.to_f
然后,使用sprintf('%.2f', price_eur)
将其打印为字符串,前导零。
pry 2.1.2 (main):0 > price = 0.8
0.8
=>
pry 2.1.2 (main):0 > price_eur = price.to_f / 3.4528
0.23169601482854496
=>
pry 2.1.2 (main):0 > price_eur = price_eur.round(2)
0.23
=>
pry 2.1.2 (main):0 > sprintf('%.2f', price_eur)
"0.23"
=>
pry 2.1.2 (main):0 >
编辑:注意来自@Stefan的评论不要使用浮点数,而是使用BigDecimal。真的,最简单的处理钱的方法可能是使用Money gem,它已经处理了很多这些问题:https://github.com/RubyMoney/money