我們在Android應用程序中使用舍入數字時遇到問題。在Java中進行計算時,我們使用BigDecimal,這有所幫助,但我們遇到了SQLite問題,例如。Android sqllite舍入錯誤
SELECT ROUND(150.075 * 100)/100 (= 150.07, not 150.08!)
任何消化?
我們在Android應用程序中使用舍入數字時遇到問題。在Java中進行計算時,我們使用BigDecimal,這有所幫助,但我們遇到了SQLite問題,例如。Android sqllite舍入錯誤
SELECT ROUND(150.075 * 100)/100 (= 150.07, not 150.08!)
任何消化?
這是因爲由於浮點不準確,150.075 * 100
與15007.5
不一樣。雙精度浮點型150.075
的十進制表示形式爲150.07499999999999999722444243843711
。
爲了得到你想要的行爲,使用的ROUND()
兩個參數版本,它可以讓你指定的小數位數:
sqlite> SELECT ROUND(150.075, 2);
150.08
你覺得這個怎麼樣(不優雅)的解決方案:
SELECT ROUND(150.075 + 0.00000000000009, 2) (= 150.08)
我們檢查了超過5 000個不正確的值,它的效果很好。
http://www.sqlite.org/faq.html#q16 – Selvin 2013-03-07 12:27:24
@Selvin是的,我知道它 - 但如果可能的話尋找解決方案。 – ekstro 2013-03-07 12:32:46
將數據存儲爲int ...像150075 ...然後在java代碼中使用BigDecimal(150075,3) – Selvin 2013-03-07 12:35:06