浮动数字的 floor 函数

Floor function to float numbers

我写了一个 ruby 代码,将数字向下舍入如下:

def round_down(number)
  number.to_s.split(/\./)[0].to_i
end
round_down(1.9)

有人知道实现此目的的更 ruby 方法吗?

JavaScript 的 Math.floor 函数已经存在于 Ruby 中:1.9.floor

你在你的代码中所做的实际上是别的东西,它也存在:1.9.truncate

对于正数它们是相同的,但是对于负数 truncate 表现得像 ceil:

  • floor 四舍五入
  • ceil 四舍五入
  • truncate 向零舍入

如果你想重新发明轮子:

1.9.divmod(1).first # => 1
-1.9.divmod(1).first # => -2

ceil、round 和 truncate 方法在 ruby

中可用
[4] pry(main)> 1.9.round
=> 2
[10] pry(main)> 1.1.round
=> 1
[5] pry(main)> 1.9.ceil
=> 2
[9] pry(main)> 1.1.ceil
=> 2
[6] pry(main)> 1.9.truncate
=> 1
[8] pry(main)> 1.2.truncate
=> 1

您可以使用 BigDecimal#round,它有许多不同的 rounding modes:

require 'bigdecimal'
def round_down(number)
  BigDecimal.new(number, 0).round(0, :down)
end

round_down(1.9)
#=> 1.0

round_down(-1.9)
#> -1.0