2015-10-16 144 views
1

我試圖獲得包含十進制數的列的總和。結果真是奇怪的想法。SQLite - 浮點數/小數點的結果不正確總和

我試着用float和decimal兩種數據類型。

以下各列具有以下數據類型:

"euro_out" float 
"makes" decimal(10,9) 

某些查詢和結果:

1)預期結果,當值是整數

​​

2.)意外的值當該值具有十進制值時:

sqlite> update bookingviews set makes = 0.1; 
sqlite> update bookingviews set euro_out = 0.1; 
sqlite> select total(makes) from bookingviews; 
==> 172821.200005572 
sqlite> select total(euro_out) from bookingviews; 
==> 172821.200005572 

正確的結果應該是172821.2,因爲有1728212行的值爲0.1。

爲什麼要額外添加0.000005572?我怎樣才能糾正這種行爲?

謝謝。

回答

0

對於64位類型,浮點運算僅精確到約15個有效數字,對於32位類型,浮點運算僅有7個有效數字。

因此,它們不是用來代表金錢。

一個簡單的選擇是使用一個64位整數,並在「美分」報告;如果合適的話,可能會用「美元」美觀地呈現。