[#44431] コンストラクタの引数について&インスタンス変数の持ち方について — Akira Hayakawa <ruby@...>

度々オブジェクト指向についての質問ですいません。

17 messages 2008/01/04
[#44433] Re: コンストラクタの引数について&インスタンス変数の持ち方について — Yukihiro Matsumoto <matz@...> 2008/01/04

まつもと ゆきひろです

[#44469] pdf 作成 ライブラリ — "Luiz Aoki" <luizruby@...>

はじめまして、青木ルイスと申します、

14 messages 2008/01/12
[#44479] ファイル出力時のprintについて — m-hatake@... 2008/01/16

畠山と申します。

[#44483] format %g の丸めについて — 山崎雄介 <y-yamasaki@...>

山崎(ゆ)です。

14 messages 2008/01/16

[ruby-list:44491] Re: format %g の丸めについて

From: 山崎雄介 <y-yamasaki@...>
Date: 2008-01-16 13:59:25 UTC
List: ruby-list #44491
山崎(ゆ)です。

いわおかさん、アドバイスありがとうございます。

> 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 <y-yamasaki@saeilo.co.jp>


In This Thread