比如现在我a=1.10;b=1.10;a和b都是double类型的
我计算出的结果是2.1999999999999;
double很多时候都会出现这种问题,出现这种问题的本质原因是什么?还有如何解决,就是我现在就像让结果等于2.20!用四舍五入?应该怎么做?
我计算出的结果是2.1999999999999;
double很多时候都会出现这种问题,出现这种问题的本质原因是什么?还有如何解决,就是我现在就像让结果等于2.20!用四舍五入?应该怎么做?
解决方案 »
- 请问JAVA中,什么时候该强制类型转换?
- 高分求助,如何设置JDialog左上角的图标
- 想前辈请教菜鸟看些什么书籍 Java编程思想哪一个版本
- 请问BigInteger和BigDecimal两个方法如何使用?
- 怪了!用FileOutputStream的方式生成xml文件,使用Document解析不了,会是什么原因??
- 明天到深圳大展公司面试,大展是什么样的公司有,有深圳的兄弟知道吗?
- 关于java applet的问题
- jbuilder7问题
- tomcat 4.0中,我要用到bean,引用时class的默认路进是什么?
- 关于 java 中打印 linkedlist的乱码问题
- 向数据库添加数据的问题
- 在eclipse中如何写实现对数据库SQL2005插入和查询功能的代码
BigDecimal b=new BigDecimal(1.10);
BigDecimal c=a.add(b);
System.out.println(c.doubleValue());
如果要精确计算,请务必用String描述所有的数字,用double来构造BigDecimal,会比直接用double更难堪 BigDecimal a=new BigDecimal("1.10");
BigDecimal b=new BigDecimal("1.10");
BigDecimal c=a.add(b);
System.out.println(c.doubleValue());
不只是java
c++
c#也都存在这个问题
一般的解决办法是确定自己要的小数位数
然后四舍五入
double b = 1.10;
System.out.println(a+b);
1)4楼的四舍五入不正确。对于负数不对。
参考:
double ds=Math.round(a*100)/100.0;//对于实数a(无论正负),进行四舍五入
这时楼主要的不精确的表示
2)若要较精确的表示,可用:BigDecimal
double ds=Math.round(a*100)/100.0
double,float用于某些科学计算的场合。
在业务系统中,一般用bigdecimal来进行小数的计算,自己构造BigDecimal时切记要用String作为参数,new BigDecimal("0.1")而不要用new BigDecimal(0.1)
出现这种原因就好比,我们十进制数计算
10/3一样。