Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 四舍五入_Ruby - Fatal编程技术网

Ruby 四舍五入

Ruby 四舍五入,ruby,Ruby,我想将BigDecimal四舍五入到小数点后2位,但使用round方法时,它似乎不会双舍五入: BigDecimal.new('43382.0249').round(2).to_s('F').should == '43382.03' 但是,我得到的是输出:43382.02 我还尝试了所有其他可用的舍入模式,舍入似乎可以完成这项工作,但它会破坏其他舍入场景,例如,“670.1541”变为“670.16”(不正确),而不是“670.15”(正确)如果您希望43382.0249为42283.03,则

我想将BigDecimal四舍五入到小数点后2位,但使用round方法时,它似乎不会双舍五入:

BigDecimal.new('43382.0249').round(2).to_s('F').should == '43382.03'
但是,我得到的是输出:43382.02


我还尝试了所有其他可用的舍入模式,
舍入似乎可以完成这项工作,但它会破坏其他舍入场景,例如,“670.1541”变为“670.16”(不正确),而不是“670.15”(正确)

如果您希望43382.0249为42283.03,则首先添加0.001 如果希望670.1541为670.16,则首先添加0.001

向下/向上取整<0.005,您似乎想要<0.006

注意:如果你的数字可以是负数,那么它是-0.001


不管怎样,还是要玩一个游戏,但只要你保持一致,基本想法就应该可行。

如果你想让43382.0249变成42283.03,那么先加上0.001 如果希望670.1541为670.16,则首先添加0.001

向下/向上取整<0.005,您似乎想要<0.006

注意:如果你的数字可以是负数,那么它是-0.001


不管怎么说,还是要玩一个游戏,但只要你保持一致,基本的想法就会奏效。

看来,这个数字应该是0.02,而不是0.03——我相信这里没有实际问题。024轮到0.02

这个数字看起来应该是0.02而不是0.03——我相信这里没有实际问题。024轮到0.02

正确答案是:你所做的被称为“创造性四舍五入”。如果你在一个会计系统工作,这也被称为“欺诈”。你不应该这样“打转”

您正在寻找的答案:

您可以通过执行以下操作的算法来实现这一点:

x = the number of decimal places you would like to consider
y = the number of decimal placed you would like left when you are re done
while( x >= y )
    round your number to x places
    x = x-1
所以在ruby中:

my_num = 1.2349
x = 100
y = 2
x.downto y do |i|
    my_num = my_num.round i
end
puts my_num
这给了我们1.24,如果我的数值是1.2341,它会给我们1.23


如果可能的话,明智地使用它?

正确答案是:你所做的被称为“创造性四舍五入”。如果你在一个会计系统工作,这也被称为“欺诈”。你不应该这样“打转”

您正在寻找的答案:

您可以通过执行以下操作的算法来实现这一点:

x = the number of decimal places you would like to consider
y = the number of decimal placed you would like left when you are re done
while( x >= y )
    round your number to x places
    x = x-1
所以在ruby中:

my_num = 1.2349
x = 100
y = 2
x.downto y do |i|
    my_num = my_num.round i
end
puts my_num
这给了我们1.24,如果我的数值是1.2341,它会给我们1.23


如果可能的话,明智地使用它?

如何将.024四舍五入为0.03?实际上,它给出的四舍五入对于标准四舍五入是正确的。你似乎有两个difefrent算法和一个随机选择,你所做的就是所谓的“创造性舍入”。如果你在一个会计系统中工作,这也被称为“欺诈”。如何将.024四舍五入到0.03?实际上,它给你的四舍五入对于标准四舍五入是正确的。你似乎有两个difefrent算法和一个随机选择,你所做的就是所谓的“创造性舍入”。如果你在一个会计系统上工作,这也被称为“欺诈”。Ruby支持
BigDecimal::ROUND_HALF_UP
;也许我们还应该为
BigDecimal::ROUND\u FOUR\u ninth\u UP
添加一个模式?(我开玩笑…)Ruby支持
BigDecimal::四舍五入;也许我们还应该为
BigDecimal::ROUND\u FOUR\u ninth\u UP
添加一个模式?(我在开玩笑……)