2

Androidアプリケーションで数値の丸めに問題があります。Javaで行われる計算では、BigDecimalを使用します。これは役立ちますが、たとえばSQLiteに問題があります。

SELECT ROUND(150.075 * 100) / 100 (= 150.07, not 150.08!)
4

2 に答える 2

1

この(エレガントではない)ソリューションについてどう思うか:

SELECT ROUND(150.075 + 0.00000000000009, 2) (= 150.08)

5 000を超える誤った値でチェックしましたが、正常に機能しています。

于 2013-03-07T14:35:34.630 に答える
0

これは、浮動小数点の不正確さにより、150.075 * 100が と同じではないため15007.5です。150.075倍精度浮動小数点の の 10 進数表現は です150.07499999999999999722444243843711

ROUND()必要な動作を得るには、10 進数の桁数を指定できるの 2 つの引数バージョンを使用します。

sqlite> SELECT ROUND(150.075, 2);
150.08
于 2013-03-07T12:44:10.683 に答える