四舍五入到最近的十分位?

12

我需要将数字四舍五入到最近的十分位数。我需要使用ceil函数,但是需要保留小数点后一位。

例如:

10.38 would be 10.4
10.31 would be 10.4
10.4 would be 10.4

如果要舍入的数字超过十分之一,就应该向上舍入。

我正在运行 Ruby 1.8.7 版本。

5个回答

29

一般来说,以下方法可行:

ceil(number*10)/10

那么在Ruby中应该是这样的:

(number*10).ceil/10.0

1
这是我的做法,但我希望有一种本地的方法来完成这个任务,比如 roundup(1) 或其他什么。 - mjnissim
你如何实现保留两位小数(例如用于货币)?编辑:笨蛋。(3.191*100).ceil/100.0 让我得到了 3.2。 这是正确的,应该是 3.20。只是没有显示多余的 0。 - Greg Blass

7

Ruby的round方法可以消耗精度:

10.38.round(1) # => 10.4

在这种情况下,1会使结果四舍五入到最近的十分位。

我建议在1.9.3及以上版本中使用此答案(http://ruby-doc.org/core-1.9.3/Float.html#method-i-round)。Ruby 1.8.7及更早版本仅四舍五入为整数值(http://ruby-doc.org/core-1.8.7/Float.html#method-i-round)。 - GSP
4
10.31.round(1) => 10.3并非10.4,正如提问者所要求的一样。 - Anjan

3
如果您有ActiveSupport可用,它会添加一个round方法:
3.14.round(1) # => 3.1
3.14159.round(3) # => 3.142

以下是源代码:

源代码如下:

def round_with_precision(precision = nil)
  precision.nil? ? round_without_precision : (self * (10 ** precision)).round / (10 ** precision).to_f
end

8
这应该四舍五入到最接近的十分位数,而不是像提问者要求的那样向上四舍五入到最接近的十分位数。 - brittohalloran

2
要在 Ruby 中四舍五入到最近的十位数,您可以执行以下操作: (number/10.0).ceil*10 例如: (12345/10.0).ceil*10 # => 12350

0
(10.33  + 0.05).round(1) # => 10.4

这个函数总是像ceil一样向上取整,简洁明了,支持精度,而且不需要使用/goofy/10 *10.0之类的东西。

例如:向最接近的百分位数四舍五入:

(10.333  + 0.005).round(2) # => 10.34

保留到千分位:

(10.3333  + 0.0005).round(3) # => 10.334

等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接