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

mysql:13918

From: mailist <mailist <mailist@xxxxxxxxxx>>
Date: Wed, 25 Apr 2007 22:37:19 +0900
Subject: [mysql 13918] Re: TRUNCATEで掛け算

立松さん、
お教え戴いたリンクで調べたところ、次のような説明がありました。
まさにこのことが起きているようです。↓
>注意: 小数は通常、正確な数値としてではなく、倍精度の値としてコンピュー
>タに格納されるため、次のようなおかしな結果が出ることがある。 

>SELECT TRUNCATE(10.28*100,0);
       -> 1027
>これは、10.28 が実際には 10.2799999999999999 のような値として格納される
>ことによって発生する。


KEN公さん、
>tdiscountのデータ型は、float等にしていませんか?
MySQL 4.1で、priceをint、tdiscountをdec(3,2)でやって4160.999と誤差が生じ
ました。どうしてだかわかりません。NUMERIC型にするなどテストしてみます。

------------------------------------------------------------
>>鈴木健です。
>>MySQLで在庫管理をしていますが、TRUNCATEを使うと掛け算が正しくなりません。
>>どうしてでしょうか?
>>
>>たとえば、priceが4380、tdiscountが0.95であるとして、
>>SELECT (price * tdiscount)
>>とすると、値は4161と正しいのですが、
>>
>>SELECT TRUNCATE((price * tdiscount),3)
>>とすると、4160.999となります。

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