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 * 10015007.5. 150.075双精度浮点数的十进制表示是150.07499999999999999722444243843711.

要获得您想要的行为,请使用ROUND()允许您指定小数位数的两个参数版本:

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