起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1704|回复: 0

[分享] 关于KSQL update 的时候,小数会出现误差的问题

[复制链接]

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2015-8-27 14:23:28 | 显示全部楼层 |阅读模式
  1. map.put("Balance", new BigDecimal(oldBalance).subtract(amt));  
  2. ksql = "update BankCardInfo b set b.Balance = :Balance where b =:ABankID";
  3. KSQL.executeUpdate(ksql, map, dataModel, null);  //如果直接在UPDATE语句里对字段进行数字赋值,KSQL在执行的时候,会出现小数误差,所以将所有的数值计算都通过BigDecimal算完之后赋值给MAP.再执行KSQL的update.
复制代码
  1. ksql = "update BankCardInfo b set b.Balance = " + map.get("Balance") + " where b ='" + map.get("ABankID") + "'";
  2.                                                 KSQL.executeUpdate(ksql, null, dataModel, null);
复制代码
上面两块代码中,第二块经过多次运行之后,就会出现小数误差问题。经过多次测试发现,用第一种方法可以避免小数误差问题。
此问题困扰了我好长时间,把我郁闷了很久的问题解决方法跟大家分享一下。其实是一个很小的操作方法问题,但可以帮您省去大量的时间。

原来字段是用了FLOAT类型,后来发现有小数问题,就改成了DOUBLE,还是不行,就改成了BigDecimal,经过一个多月的测试,过几天就有人跟我报告说是少了一分钱,再过几天又说是多了一分钱,经过再三调试,后来直接把数值写到UPDATE语句里,发现写进数据库里的数跟代码里的竟然不一样。

终于让我找出了问题,就是KSQL在进行语义转换的时候,把我的小数给换出了问题。



执行了这条SQL语句后,数据里的数值竟然是:1054600.00。字段类型为DECIMAL,mysql..pn.png
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 18:07 , Processed in 0.101316 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表