Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 转换货币需要适当的回合(2)_Ruby - Fatal编程技术网

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

Ruby 转换货币需要适当的回合(2),ruby,Ruby,这是我将当地货币转换为欧元的代码 price_eur = price.to_i / 3.4528 price_eur = price_eur.round(2) 问题是,如果price=0.8,我会得到结果price\u eur=0.0,为什么 如何使其0.80(正确的值且始终前导零) 因为0.8.to_i是0 这是不可能的 to_i向下舍入到最接近的整数-so0.8。to_i为零。然后零对其他任何东西都保持零 不能使用整数-请使用浮点价格。到f 然后,使用sprintf('.2f',price

这是我将当地货币转换为欧元的代码

price_eur = price.to_i / 3.4528
price_eur = price_eur.round(2)
问题是,如果
price=0.8
,我会得到结果
price\u eur=0.0
,为什么

如何使其
0.80
(正确的值且始终前导零)

  • 因为
    0.8.to_i
    0

  • 这是不可能的


  • to_i
    向下舍入到最接近的整数-so
    0.8。to_i
    为零。然后零对其他任何东西都保持零

    不能使用整数-请使用浮点<代码>价格。到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,它已经处理了很多这样的问题:

    而不是
    price.to\i
    do
    price.to\f
    。这是一个尾随零,不会产生
    0.80
    这样的东西。它只是那样印了一条线。萨瓦:是的。。。不能将其存储为尾随零的浮点。当您想将它呈现给用户时,您可以通过将它呈现为前导和尾随为零的字符串来处理它。这就是OP想要做的事情。苏里亚-很抱歉你觉得我的解释不好。我说它四舍五入到最接近的整数。我不知道如何使它更清楚?你永远不应该使用(或建议)浮动来进行货币计算,而应该使用它。@Stefan除非你正在计算税收、汇率、利息等,但请尝试
    “0.8”。to_I.round(2)
    “0.8”。to_I.round(2)给我0.0。
    “0.8”。to_I
    返回
    0
    0.round(2)
    返回
    0.0