Androidアプリケーションで数値の丸めに問題があります。Javaで行われる計算では、BigDecimalを使用します。これは役立ちますが、たとえばSQLiteに問題があります。
SELECT ROUND(150.075 * 100) / 100 (= 150.07, not 150.08!)
Androidアプリケーションで数値の丸めに問題があります。Javaで行われる計算では、BigDecimalを使用します。これは役立ちますが、たとえばSQLiteに問題があります。
SELECT ROUND(150.075 * 100) / 100 (= 150.07, not 150.08!)
この(エレガントではない)ソリューションについてどう思うか:
SELECT ROUND(150.075 + 0.00000000000009, 2) (= 150.08)
5 000を超える誤った値でチェックしましたが、正常に機能しています。
これは、浮動小数点の不正確さにより、150.075 * 100
が と同じではないため15007.5
です。150.075
倍精度浮動小数点の の 10 進数表現は です150.07499999999999999722444243843711
。
ROUND()
必要な動作を得るには、10 進数の桁数を指定できるの 2 つの引数バージョンを使用します。
sqlite> SELECT ROUND(150.075, 2);
150.08