2015-07-20 141 views
1

似乎Ruby选择将负数倒圆而不是接近零。当数字为零时向上取整而不是向下取整

-1.5.round 
#=>-2 

而正数工作的其他方式:

2.5.round 
#=>3 

如何围捕负数(接近零),而不是四舍五入下来的?我使用的是Ruby 2.2.2版本。

+0

请列出你的Ruby版本。 – onebree

+1

第一个问题是为什么你想要这样做?有几十个四舍五入方法,每个都有自己的优点和缺点,所以知道你的目标是理想的。一个好的舍入函数将数字上下一半舍入,这样就不会严重扭曲平均值或者和数。 – tadman

+0

@tadman我想收集大量的对。我把这两个分开,然后把结果整理出来。但是,如果结果恰好是负值,则会下降而不是上升。这对我来说似乎不合逻辑,我希望解决它。 –

回答

3

这应该工作。

> (-1.5+0.5).floor 
=> -1 
> (-1.4+0.5).floor 
=> -1 
> (-1.6+0.5).floor 
=> -2 
+1

是否有一个内置的Ruby方法来控制对OP的喜好的负数舍入?有没有他可以使用的宝石? – onebree

+1

您可以随时使用自己的'fancy_roundy'方法扩展内置类。如此处所示,使用偏差因子通常是如何接近的。 – tadman

0

也许你必须做出一些调整,以圆形,只要你想:

def roundy(x) 
    x.to_i 
    if x<0 
    puts (x. + 0.1).round 
    else puts x.round 
    end 
end