こんなプログラムを書いていた。
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)
という具合で、Fixnum
と Float
の ceil
は引数を取れない。
なんでだろ。