From: KAKUTANI Shintaro Date: 2009-10-13T16:43:24+09:00 Subject: [ruby-dev:39474] BigDecimal#to_i/to_int の挙動について かくたにです。 rubyspec を1.8ターゲットで動かしていて、標記のspecが手元では通らないことに気づきました。 何が正しいのか自分ではわからないので教えてもらえるとうれしいです。 BigDecimalで InfinityとNaN を to_i/to_int すると、 手元の環境では次のようになりました: (動かしているバージョンが少し前のもので恐縮です) $ /usr/bin/ruby -v -rbigdecimal -e '%w[Infinity NaN].each{|s| v = BigDecimal.new(s); i = v.to_i rescue $!.class; print "#{v}:";p i}' ruby 1.8.6 (2008-08-11 patchlevel 287) [universal-darwin9.0] Infinity:nil NaN:nil $ ruby -v -rbigdecimal -e '%w[Infinity NaN].each{|s| v = BigDecimal.new(s); i = v.to_i rescue $!.class; print "#{v}:";p i}' ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9] Infinity:FloatDomainError NaN:FloatDomainError $ ruby19 -v -rbigdecimal -e '%w[Infinity NaN].each{|s| v = BigDecimal.new(s); i = v.to_i rescue $!.class; print "#{v}:";p i}' ruby 1.9.2dev (2009-10-05 trunk 25235) [i386-darwin9.8.0] Infinity:FloatDomainError NaN:FloatDomainError るりまの記述は1.8も1.9も「Infinity や NaN のとき、i は nil になります」でした。 http://doc.okkez.net/187/view/method/BigDecimal/i/to_i http://doc.okkez.net/192/view/method/BigDecimal/i/to_i 手元で失敗したspecは、 http://github.com/rubyspec/rubyspec/blob/master/library/bigdecimal/shared/to_int.rb の5行目と6行目です。 -- { :name: ["KAKUTANI", "Shintaro"], :email: shintaro@kakutani.com, :website: http://kakutani.com/ }