|
- map.put("Balance", new BigDecimal(oldBalance).subtract(amt));
- ksql = "update BankCardInfo b set b.Balance = :Balance where b =:ABankID";
- KSQL.executeUpdate(ksql, map, dataModel, null); //如果直接在UPDATE语句里对字段进行数字赋值,KSQL在执行的时候,会出现小数误差,所以将所有的数值计算都通过BigDecimal算完之后赋值给MAP.再执行KSQL的update.
复制代码- ksql = "update BankCardInfo b set b.Balance = " + map.get("Balance") + " where b ='" + map.get("ABankID") + "'";
- KSQL.executeUpdate(ksql, null, dataModel, null);
复制代码 上面两块代码中,第二块经过多次运行之后,就会出现小数误差问题。经过多次测试发现,用第一种方法可以避免小数误差问题。
此问题困扰了我好长时间,把我郁闷了很久的问题解决方法跟大家分享一下。其实是一个很小的操作方法问题,但可以帮您省去大量的时间。
原来字段是用了FLOAT类型,后来发现有小数问题,就改成了DOUBLE,还是不行,就改成了BigDecimal,经过一个多月的测试,过几天就有人跟我报告说是少了一分钱,再过几天又说是多了一分钱,经过再三调试,后来直接把数值写到UPDATE语句里,发现写进数据库里的数跟代码里的竟然不一样。
终于让我找出了问题,就是KSQL在进行语义转换的时候,把我的小数给换出了问题。
|
|