2012-02-20 8 views
3

アンドロイドが提供するsqliteデータベースにドル金額を格納しようとしていますが、正しく機能していないようです。このエラーは、金額全体ではないトランザクションを削除しようとした場合にのみ発生します。つまり409.00が動作しますが、410.44は動作しません。アンドロイドデータベースに浮動小数点数を格納する

私は410.44のような値を保存し、その量のデータベースを照会すると、私はマッチを得ません。私はREALデータ型とTEXTデータ型としてこのフィールドを使用しようとしましたがどちらも動作しません。次の例では、getTransAmount()メソッドはfloatを返します。これは、DBデータ型がREALのときに実行したバージョンです。どんな助けもありがとう。ありがとう。

+0

私はテキストとして鉱山を格納し、私はDBからそれらを取得した後、それらを解析し、私は多くを使用しないでください。 –

答えて

7

通貨額を格納するために浮動小数点を使用しないでください。浮動小数点が不正確です。あなたが知っているように、浮動小数点の比較は特に扱いにくいです。

私は通常、通貨の金額をデータベースに整数として格納します。 410.4441044409.0040900として格納されます。

表示するために410.44形式に変換する必要がある場合は、BigDecimalクラスを使用して、使用する位取り(この場合は2)を渡して小数点をシフトします。

例:

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

通貨のためのFPのための+1、幸せな8K! – DNA

+0

いいえ、 'scaledAmount'にはまだ41044が含まれています.100で割る必要があります。' setScale() 'では不十分です。 –

関連する問題