2012-02-20 61 views
3

我想在android提供的sqlite數據庫中存儲美元數額,但它似乎並沒有正常工作。只有當我嘗試刪除不是全部金額的交易時纔會出現此錯誤。即409.00會工作,但410.44不會。在android數據庫中存儲浮點數

如果我存儲一個值,如410.44,然後查詢數據庫的數量,我不會得到一個匹配。我試圖使用這個字段作爲REAL數據類型和TEXT數據類型,但都不起作用。在下面的例子中,getTransAmount()方法返回一個浮點數。這是我在db數據類型爲REAL時運行的版本。任何幫助,將不勝感激。謝謝。

cv.put(transAmount, t.getTransAmount()); 

db.insert(tableName, null, cv); 
x = db.delete(tableName, transAmount + " = " + t.getTransAmount(), null); 
+0

我存儲我的文字和解析這些後,我從數據庫中得到他們,但我不使用許多。 – 2012-02-20 16:37:57

回答

7

請勿使用浮點來存儲貨幣金額。浮點數不準確;正如你所發現的那樣,浮點比較處理起來特別棘手。

我通常將貨幣金額作爲整數存儲在數據庫中,例如, 410.44將被存儲爲41044409.00作爲40900

當您需要轉換爲410.44格式以供顯示時,可以使用BigDecimal類,並將其傳遞給使用的比例(本例中爲2),即將小數點移位的位數。

例子:

int  storedAmount = 41044; 
BigDecimal scaledAmount = new BigDecimal(storedAmount); 
scaledAmount.setScale(2); // now contains 410.44 
+0

+1對於貨幣沒有FP,開心8K! – DNA 2012-02-20 16:37:04

+0

不,'scaledAmount'仍然會包含41044.你需要將它除以100.'setScale()'是不夠的。 – 2013-01-14 11:07:39