[前][次][番号順一覧][スレッド一覧]

mysql:6687

From: とみたまさひろ <とみたまさひろ <tommy@xxxxxxxxxx>>
Date: Tue, 10 Dec 2002 22:19:21 +0900
Subject: [mysql 06687] Re: 小数点を含んだ数値の演算について

とみたです。

On Tue, 10 Dec 2002 20:54:52 +0900
"matsuda" <matsuda@xxxxxxxxxx> wrote:

> マニュアルに
> ==============================================================
> コンピュータでは小数点数は正確な数値としては格納されず、double値
> として格納されます。
> 次の結果によってだまされるでしょう
> TRUNCATE(10.28*100,0) → 1027
> 上記は10.28は実際には、10.279999999999999のようなものとして
> 格納されるために発生します。
> ==============================================================
> と記述されているので、TRUNCATE関数を用いることによって小数点以下が
> 切り捨てられてしまっていると思われるのですが、こういう場合に
> 正確な結果を得たいときには、どうやって回避したら良いのでしょうか?

誤差を出したくないのなら、浮動小数点数は使うべきではないです。たとえば、
suryo の少数点以下が必ず2桁なのなら、100倍した整数として格納しておい
て、結果を出力するときに、100で割って出力するとか…。

> たまたまこのような数値の組み合わせで得られた結果だと思うのですが、
> 乗算以外や、上記数値以外にもこういった現象が起こりうると考えると
> 演算を使用するときには必ず注意した方がいい、
> ということになるのでしょうか?

そうですね。よく言われる例では、0.1 を 10回足すと 0.99999... になると
いうのがあります。浮動小数点を使う限り、コンピュータでは誤差は避けられ
ない問題だと思います。

-- 
とみたまさひろ <tommy@xxxxxxxxxx>
日本MySQLユーザ会 http://www.mysql.gr.jp

[前][次][番号順一覧][スレッド一覧]

      6685 2002-12-10 20:54 ["matsuda" <matsuda@x] 小数点を含んだ数値の演算について        
->    6687 2002-12-10 22:19 ┣[とみたまさひろ <tomm]                                       
      6695 2002-12-11 12:08 ┃┗[SUGAWARA Hajime <sug]                                     
      6697 2002-12-11 13:15 ┃ ┗[SUGAWARA Hajime <sug]                                   
      6693 2002-12-11 12:02 ┗[madara <madara@xxxxx]