2010-10-02 1341 views
5

我有一個SQLite3表格,其格式爲DECIMAL(7,2),但每當我選擇行的值不小於2的第二個小數位(例如3.00或3.10)時,結果總是具有尾隨零(s)缺失(例如3或3.1)。有什麼辦法可以在SELECT語句中應用格式化函數,以便獲得所需的2dp?我試過ROUND(),但這沒有效果。否則,我必須繼續將結果列值轉換爲所需的格式(每次執行SELECT語句時都使用Python),這是一種真正的痛苦。SQLite的小數位數問題

我甚至不介意結果是字符串而不是數字,只要它有正確的小數位數。

任何幫助,將不勝感激。

艾倫

+0

如果你要編寫一個函數來做到這一點,一個正確的FORMAT()函數將會得心應手:) – MikeAinOz 2010-10-03 22:11:48

回答

4

SQLite內部使用IEEE二進制浮點運算,這確實不借給自己很好地保持小數的具體數量。爲了獲得這種類型的小數處理將需要一個:

  1. 定點數學,或
  2. IEEE十進制浮點(相當少見),或
  3. 處理一切爲字符串。

格式化值提取後(從浮點到串轉換)是實施事物的最簡單的方法。你甚至可以把它隱藏在某種包裝的內部,這樣其餘的代碼就不必處理後果。 但是如果你打算在之後對數值進行算術運算,那麼你最好不要格式化,而是使用查詢返回的值,因爲格式並重新轉換爲二進制浮點(Python使用的,就像絕大多數其他現代語言一樣)以較低的精度丟失大量信息。

+0

謝謝Donal - 我開始自己思考同樣的問題,但你已經說得更清楚了。我將開發一個display_format(row)函數,根據表格編譯指定的數據結構(這主要適用於帶有小數和日期的列)將每行值轉換爲正確的顯示格式。問候。 – 2010-10-03 20:00:29