精度问题

yhd0411 2007-08-15 04:53:53
String sTerms="118";
String sRate="5.1";
String sBillSum="345500"

sEndorseTimes="3";
sActualint =""


sActualint = Terms*sRate*sBillSum/30000+sEndorseTimes*sRate*sBillSum/30000;

为什么sActualint最后结果是7086.36499999
我想得到的是7086.37
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chq235 2007-08-15
  • 打赏
  • 举报
回复
这是长精度,不是短精度。
zdjray 2007-08-15
  • 打赏
  • 举报
回复
在某些对数值精度要求非常的应用中直接使用java的float中的*,/运算可能会丢失精度,造成小量的误差,但是如果将这些误差相加可能会放大。

如System.out.println(534.2 / 100);
执行的结果却是5.3420000000000005
System.out.println(4.015 * 100);执行的结果是401.49999999999994
都有误差。

解决方案使用BigDecimal,如:
System.out.println((new BigDecimal("123.3")).divide(new BigDecimal("100")));
System.out.println((new BigDecimal("4.015")).multiply(new BigDecimal("100")));

但是如果依然使用:
System.out.println((new BigDecimal(123.3)).divide(new BigDecimal(100)));
System.out.println((new BigDecimal(4.015)).multiply(new BigDecimal(100)));

原因是因为在内存中存储浮点数的方式和整型不一样,将浮点数传入函数时就已经有差距了,所以需要传入字符串。
如果是数据库中存储的浮点型数据,则需要使用ResultSet.getBigDecimal得到BigDecimal再进行运算
yhd0411 2007-08-15
  • 打赏
  • 举报
回复
是javascript,不应该在这里问
tuifeirensheng 2007-08-15
  • 打赏
  • 举报
回复
昏倒,字符串变量做运算???

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧