在线上有一个奇怪的问题,但它不能离线复制。
具体问题如下:数据库中存储的值为107.4,类型为decimal,取值由mybatis获取,mybatis配置的java类型为双精度
以下是说明:
BigDecimal.valueOf (the value).multiply(BigDecimal.valueOf(100)).LongValue()返回:
10739在本地测试,结果总是:
10740如何解决呢?
发布于 2018-12-12 21:54:06
如果将该值作为double,则计算机中的值107.4将具有近似误差,因为浮点值是2的(负)幂的有限和。
现在有舍入问题,fp-strict和更多,但最好删除原因,并使用BigDecimal而不是double。请注意,new BigDecimal(107.4)不会这样做,只有new BigDecimal("107.4")或自己校正精度/小数位数。
double value = 107.4; // Might actually be more like 107.39999987.
BigDecimal x = new BigDecimal(value).setScale(1, BigDecimal.ROUND_HALF_UP);其中,比例1对应于数据库列定义。
https://stackoverflow.com/questions/53743845
复制相似问题