double丢失精度问题,大侠们帮帮忙~

叮当你去哪了 2014-01-24 11:07:59
正常计算方法:
double a = 5000000.4;
double b = 0.0;
double db = (a-b)/10;
System.out.println(db);
结果:500000.04000000004

听网上说可以用BigDecimal解决,如下:
System.out.println(new BigDecimal(a).subtract(new BigDecimal(b)).divide(new BigDecimal(10)).doubleValue());
结果依然为:500000.04000000004

请大侠们给个解决的办法~
...全文
1459 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oh_Maxy 2014-01-24
  • 打赏
  • 举报
回复
使用double与目标值做比较,需考虑精度。 比如double型数a,与b比较,不能直接等于,而是考校它们的差值是否在精度内。 比如精度要求误差0.00001内,那么应该这样判断:|a-b|<0.00001
树林谭 2014-01-24
  • 打赏
  • 举报
回复
BigDecimal to1 = new BigDecimal(transAmt).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal result = new BigDecimal("0.00").setScale(2, BigDecimal.ROUND_HALF_UP); result = to1.add(result);
静山晚风 2014-01-24
  • 打赏
  • 举报
回复
怎么丢失精度了,是多了个 最后那个0.00000000004了吗,float和double就这样,没办法啊
ningbohezhijun 2014-01-24
  • 打赏
  • 举报
回复
不要用这个构造函数,用string的,或者静态的,你这个一样会构造函数结束后就丢失精度了。
jb1314lovewo 2014-01-24
  • 打赏
  • 举报
回复
为什么我的没有丢失精度呢?

package com;

public class JustTest {

public static void main(String[] args) {
double a =500000.4;
double b =0.0;
double db=(a-b)/10;
System.out.println(db);

}
}


输出结果是
wanding_ 2014-01-24
  • 打赏
  • 举报
回复
对精度有要求的话,用BigDecimal

62,621

社区成员

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

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