LoginSignup
7
6

More than 5 years have passed since last update.

ruby の ceil で罠にハマった。

Posted at

こんなプログラムを書いていた。

a = 11r/3 # 有理数型 3.666...
b = a.ceil -1 # a 未満の整数で最大
p b # 3 を期待。

ところが、b の値は 10 になる。

上記のソースは

a = 11r/3 # 有理数型 3.666...
b = a.ceil( -1 )# 10 の位まで切り上げる
p b # 3.666... を 10 の位まで切り上げるので 10 になる

ということになっていた。
まあ不用意に空白を置いたのが直接の原因なんだけど、 ceil にこんな機能があったとは。

しかし、

require 'bigdecimal'

BigDecimal.new(1).ceil(-1) # => BigDecimal の 10 になる
(1r).ceil(-1) # => 10

1.ceil(-1) # ArgumentError: wrong number of arguments (1 for 0)
(1.0).ceil(-1) # ArgumentError: wrong number of arguments (1 for 0)

という具合で、FixnumFloatceil は引数を取れない。

なんでだろ。

7
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6