如何解决Android SQLite舍入错误

时间:2013-03-07 12:21:10

标签: android sqlite rounding rounding-error

我们的Android应用程序中存在舍入数字的问题。在使用Java进行的计算中我们使用BigDecimal,这会有所帮助,但是对于SQLite,我们遇到了问题,例如

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

2 个答案:

答案 0 :(得分:1)

您对此(非优雅)解决方案的看法:

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

我们检查了超过5 000个不正确的值并且它运行良好。

答案 1 :(得分:0)

这是因为由于浮点不准确,150.075 * 10015007.5不同。双精度浮点中150.075的十进制表示形式为150.07499999999999999722444243843711

要获得所需的行为,请使用ROUND()的双参数版本,它允许您指定小数位数:

sqlite> SELECT ROUND(150.075, 2);
150.08