2016-12-15 11 views
0

なぜ次のSQLクエリSQLiteのSumの結果が間違っているのはなぜですか?

Insert Into Test (ItemQty) VALUES (1.445); 
Insert Into Test (ItemQty) VALUES (0.000000000000001); 

Select Sum(ItemQty) from Test; 

1.4451.445000000000001結果としてではなくを生成しますか? ここには何が欠けていますか?

+0

コンピュータとデータベースがどのように数値を表しているかを理解する必要があります。まず、 'ItemQty'の型を理解してから、固定小数点または浮動小数点値の研究を行います。 –

+0

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Lucero

答えて

1

SQLiteバージョン3のREAL値は、「8バイトIEEE浮動小数点数」(https://www.sqlite.org/datatype3.htmlを参照)として格納されます。これらの値は、わずか16桁未満の数字を許容します(https://en.wikipedia.org/wiki/IEEE_floating_point#Basic_and_interchange_formatsを参照)。ただし、定数1.445000000000001の長さは17で、この形式の機能を(ちょうど)超えています。

実際には、私はあなたの例を再現したが、小数点の後に1つ少ないゼロで2番目の値を挿入すると、私は結果1.44500000000001を受け取った。

これはわずか16桁です。

関連する問題