我们的 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
双精度浮点数的十进制表示是150.07499999999999999722444243843711
.
要获得您想要的行为,请使用ROUND()
允许您指定小数位数的两个参数版本:
sqlite> SELECT ROUND(150.075, 2);
150.08