转换货币需要适当的回合(2)

时间:2014-10-14 10:37:03

标签: ruby

这是我将本地货币转换为EUR

的代码
price_eur = price.to_i / 3.4528
price_eur = price_eur.round(2)

问题是,如果price=0.8,我得到结果price_eur=0.0,为什么?

如何使它成为0.80(正确值且始终为零)?

2 个答案:

答案 0 :(得分:1)

  1. 因为0.8.to_i0

  2. 这是不可能的。

答案 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