From: Tomoyuki Chikanaga Date: 2010-08-05T17:33:57+09:00 Subject: [ruby-dev:41936] [Bug #3659] Marshal.load(Marshal.dump(10.0)) => 1.0 Bug #3659: Marshal.load(Marshal.dump(10.0)) => 1.0 http://redmine.ruby-lang.org/issues/show/3659 起票者: Tomoyuki Chikanaga ステータス: Open, 優先度: Normal Target version: 1.9.x ruby -v: ruby 1.9.3dev (2010-08-04 trunk 28840) [i686-linux] trunk で 10.0, 200.0 のように 0 でない桁が1つだけの Float を Marshal.dump -> load すると桁がなくなってしまいます。 >> Marshal.load(Marshal.dump(1.0)) => 1.0 >> Marshal.load(Marshal.dump(10.0)) => 1.0 >> Marshal.load(Marshal.dump(100.0)) => 1.0 >> Marshal.load(Marshal.dump(110.0)) => 110.0 r27774, r27792, r27937 の一連の修正で、w_float がダンプする表現が 100.0 => "100" から 100.0 => "1.e2" のように変化したのに load 時に利用している ruby_strtod() がこのような表現は "1" までしか読まないためです。 なお ruby_strtod が "1.e2" のような表現を受け付けるようにすればいいかとも思ったのですが r17072 のコミットログによればこれは意図的なようです。 ---------------------------------------- http://redmine.ruby-lang.org