我们的Android应用程序中存在舍入数字的问题。在使用Java进行的计算中我们使用BigDecimal,这会有所帮助,但是对于SQLite,我们遇到了问题,例如
SELECT ROUND(150.075 * 100) / 100 (= 150.07, not 150.08!)
答案 0 :(得分:1)
您对此(非优雅)解决方案的看法:
SELECT ROUND(150.075 + 0.00000000000009, 2) (= 150.08)
我们检查了超过5 000个不正确的值并且它运行良好。
答案 1 :(得分:0)
这是因为由于浮点不准确,150.075 * 100
与15007.5
不同。双精度浮点中150.075
的十进制表示形式为150.07499999999999999722444243843711
。
要获得所需的行为,请使用ROUND()
的双参数版本,它允许您指定小数位数:
sqlite> SELECT ROUND(150.075, 2);
150.08