可能有人会说返回了double,自然会出现精度问题,用decimal转换,但我发现相加时是否出现多余小数位居然和输入的数字有关!先看代码:
代码
public class Test{
double f1,f2,f3;
public static void main(String[] args) {
Testf = new Test();
f.setF1(12.49);
f.setF2(14.23);
f.setF3(0.95); //注意这几个数字
double all = f.getF1()+f.getF2()+f.getF3();
System.out.println(all);
}
public double getF1() {
return f1;
}
public void setF1(double f1) {
this.f1 = f1;
}
public double getF2() {
return f2;
}
public void setF2(double f2) {
this.f2 = f2;
}
public double getF3() {
return f3;
}
public void setF3(double f3) {
this.f3 = f3;
}
}
上面计算3个double数相加,我在改变最后一个变量f3的值时,发现有时候会出现多余小数位,有时候又不会,例如f3=0.95的时候,结果是27.669999999999998;但f3=0.85时,结果就是27.57。
我分别尝试了f3从0.15 ~ 0.95,发现在.15/.45/.65/.95会出现多余小数位,其他情况不会。
但却找不到什么规律,不知道是怎么回事,请各位帮忙看看。
代码
public class Test{
double f1,f2,f3;
public static void main(String[] args) {
Testf = new Test();
f.setF1(12.49);
f.setF2(14.23);
f.setF3(0.95); //注意这几个数字
double all = f.getF1()+f.getF2()+f.getF3();
System.out.println(all);
}
public double getF1() {
return f1;
}
public void setF1(double f1) {
this.f1 = f1;
}
public double getF2() {
return f2;
}
public void setF2(double f2) {
this.f2 = f2;
}
public double getF3() {
return f3;
}
public void setF3(double f3) {
this.f3 = f3;
}
}
上面计算3个double数相加,我在改变最后一个变量f3的值时,发现有时候会出现多余小数位,有时候又不会,例如f3=0.95的时候,结果是27.669999999999998;但f3=0.85时,结果就是27.57。
我分别尝试了f3从0.15 ~ 0.95,发现在.15/.45/.65/.95会出现多余小数位,其他情况不会。
但却找不到什么规律,不知道是怎么回事,请各位帮忙看看。
解决方案 »
- mybatis Access denied for user ''@'localhost' to database 'game_srv_db'
- 请教,webservice远程调用方法的同步解决办法~
- 你们再仔细看看 问题没有那么简单
- 关于JAVA SWING控制vrml EAI接口问题
- 麻烦帮忙看下这个程序出现什么问题了呢?运行是报“出错啦!”
- java打包问题
- java求助
- 怎样改变按钮上字体的大小和颜色???
- jbuilder7在编辑的时候怎么不支持TAB键缩排文档,是不是可以设置?
- 高手们请救救我,为什么我的VAJ里可视化组合和源代码不能照应??急,急,急!
- 类的据传递问题
- 新手,,求高手帮忙看看这个错误是什么原因
精度问题
二进制浮点不可能将0.1——或者10的其它任何次负幂——精确表示为一个长度有限的二进制小数 (看下计算机组成原理中的浮点数的表示方法,好象有不同的标准)解决的方法可以用BigDecimal类,该类位于java.math包中,它的用法其实挺简单的,不妨自己去查下API