[#47173] 小数点以下を切り捨てる方法について — "T.Soejima" <clev@...2.so-net.ne.jp>

お世話になっております。そえじま@勉強中です。

16 messages 2010/06/23

[ruby-list:47187] Re: 小数点以下を切り捨てる方法について

From: Tetsuo Sakaguchi <saka@...>
Date: 2010-06-24 09:51:07 UTC
List: ruby-list #47187
ひょっとして既出かも知れませんが、、、、。

In message <4C231B10.3080608@ck2.so-net.ne.jp> 2010-06-24T17:44+0900,
	"T.Soejima" <clev@ck2.so-net.ne.jp> wrote:
> いただいた方法のどれを使っても、1.2344999999999999 を与えると
> どうしても四捨五入してしまうようです。

そうではなく、そもそもRuby で組み込みの実数は C言語の double で
実装されているので、多くの環境では「64ビットの2進法浮動小数点数」に
なります。その結果、1.2344999999999999 はその表現可能な桁数を越えているので、
1.2345 と区別できない(多分、文字列で表されたものを解釈して内部表現に
する時点で同じ値になってしまう)だけです。なので、そもそも

irb(main):003:0> 1.2345 == 1.2344999999999999
=> true

のようになります。だから、その値をどう加工しても1.2345 と同じ結果になる次第。

そういう桁数まで扱いたければ、添付ライブラリの bigdecimal を使うなど、
組み込みの実数 Float 以外のものを使う必要があるのだと思います。
http://doc.okkez.net/static/187/library/bigdecimal.html

--
阪口哲男@図書館情報メディア研究科.大学院.筑波大学
Tetsuo SAKAGUCHI.
Graduate School of Library, Information and Media Studies
University of Tsukuba, JAPAN.

In This Thread