From: "山崎雄介" Date: 2008-01-16T22:59:25+09:00 Subject: [ruby-list:44491] Re: format %g の丸めについて 山崎(ゆ)です。 いわおかさん、アドバイスありがとうございます。 > BigDecimal はいかがでしょう? BigDecimalを試してみたんですが、formatを使うと同じ結果になってしまいました。 format('%.2G', BigDecimal.new("0.00000815")) => "8.1E-006" format('%.2G', BigDecimal.new("0.000008151")) => "8.2E-006" それでBigDecimal#roundを使ってみました。 val = BigDecimal.new("0.00000815") val.round(7).to_s => "0.82E-5" 確かに、10進数で計算していて誤差は発生していないようです。 しかし、roundが元の数字の桁位置をとるらしく、これだとformat Gのように、 自動的に有効数字にするのは難しいです。 それから、BigDecimal.newの二つ目の引数に有効桁数を指定できるらしく、内部の計算に は使われているようなのですが、フォーマットには反映されないようでした。 val = BigDecimal.new("0.00000815", 2) # 有効数字2桁のつもり val.to_s => "0.815E-5" # 丸めてくれるかと期待したんですが。 _______________________ Yusuke Yamasaki