2017-01-05 18 views
0

MySQLサーバ(v5.5.50-0 + deb8u1)で実行しているクエリに関する質問があります。MySQL round in query、間違った結果

SELECT 12 - (SELECT qty FROM Table WHERE id = 5213) AS Amount 

ので、金額の値が12である - 8,5500000000000007 = 3.4499999999999993

しかし、私は、クエリ実行する場合:

SELECT qty FROM Table WHERE id = 5213 

を、それはそう、レコードに書かれた正しい番号である8.55を返します。私は最初の鳴き声が3.45を返すと予想していました。

表「表」の「qty」列は、「DOUBLE」です。

どうすれば可能ですか?クエリから正解を得るにはどうすればよいですか? ありがとうございました

+2

浮動小数点演算の世界へようこそ。 –

答えて

2

さて、それはjust the way floating numbers areです。

が正確で正確な値として格納されていないため、浮動小数点数が混乱することがあります。 SQLステートメントに書かれた のような浮動小数点値は、内部で表現された値 と同じでない場合があります。

この文は、多くのプログラミング言語にも当てはまります。いくつかの数字には正確な表現さえありません。ここでの問題は、ベース10に 分数1/3を考えてみましょう最初は理解しやすいですpython manual

から何か。

0.3または、より良い、

0.33または、より良い、

0.333など:あなたは基本10分数としてそれを近似することができます。何桁の数字を書き留めても、結果は正確に1/3になることはありませんが、 の1/3の近似値がますます向上します。

を基に2桁の数字を使用しても、小数点以下の値0.1を基数2として正確に表すことはできません。 基数2では、1/10が無限に繰り返す部分です

したがって、一般的にはfloat1 = float2のタイプが悪い考えですが、誰もがそれを忘れてしまいます。

0

'qty'列を10進数(10,2)として定義できます。