realm 中设置double时。如果使用数据库自带的realm自动sum方法相加导致精度的丢失
- 需要相加的数据库的值

如:
4.850 * 151.400 = 734.290
4.950 * 297.700 = 1473.615
期望结果 = 2207.905
实际结果 = 2207.9049999999997
保留小数两位并四舍五入<2207.91与2207.90>导致 0.1的差距。
- 解决方法
- 将double转为BigDecimal 在将其相加<亲测有效>
val lists = realm.where(ABC::class.java)
.equalTo("AAA", "xxx")
.findAll()
lists?.apply {
// totalPrice = sum("totalPrice").toDouble().toBigDecimal() // 错误->精度丢失问题
totalPrice = sumByBigDecimal {it.totalPrice?.toBigDecimal() ?: BigDecimal.ZERO}
}
// 内联函数
inline fun <T> Collection<T>.sumByBigDecimal(selector: (T) -> BigDecimal): BigDecimal {
var sum: BigDecimal = BigDecimal.ZERO
for (element in this) {
sum += selector(element)
}
return sum
}
- 将数据库中额double(需要相加的)使用BigDecimal替换<理论可行> -->(注意Realm数据库迁移)

