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となります。