まつもと ゆきひろです

In message "[ruby-list:21590] Re: squid log 時刻変換"
    on 00/03/23, Yamada Kenji <kyamada / hitachi-densa.co.jp> writes:

|実際 "939709509.298" という文字列なんですが,
|
|    print "939709509.298".to_f
|
|すると 
|
|    939709509.3
|
|のように丸められてしまうようです.

ただ単にデフォルトの表示が "%-.10g" のせいでしょう。printfな
どでちゃんと整形してやれば適切な値が得られるでしょう。もっと
も、不動小数点数の誤差があるんで完全に正確とは言えませんが。

  printf "%-.10f\n", "939709509.298".to_f
  939709509.2979999781

|リファレンスには Float に変換とあるだけで,有効数値の範囲,
|有効桁数がわかりません.これは仕様でしょうか?

to_fが丸めてるんじゃなくて、to_sが丸めてます。to_fはできる限
り正確な(doubleの範囲内で)値を計算しようとします。

                                まつもと ゆきひろ /:|)