先看代码class OverloadDemo { double test(double a) {
System.out.println("double a: " + a);
return a*a;
}
}
public class Overload { public static void main(String args[]) {
OverloadDemo ob = new OverloadDemo();
double result;
result = ob.test(1.255);
System.out.println("result: " + result);
}
}
在eclipse中结果是double a: 1.255
result: 1.5750249999999997result显然不对,但想了好长时间没有结果,只能请教大家了,谢谢
System.out.println("double a: " + a);
return a*a;
}
}
public class Overload { public static void main(String args[]) {
OverloadDemo ob = new OverloadDemo();
double result;
result = ob.test(1.255);
System.out.println("result: " + result);
}
}
在eclipse中结果是double a: 1.255
result: 1.5750249999999997result显然不对,但想了好长时间没有结果,只能请教大家了,谢谢
建议看看:
http://topic.csdn.net/u/20090303/23/db895255-c0e0-4f14-8f26-9856bc7bcd19.html
好好地读读上面的内容,上面的这段内容是我自己写的,里面写的很详细了,读明白了,你的问题也就解决了,记得当初我在解决这个问题时,查阅了大量的资料,在一般的书籍上是找不到相关的资料的,也可以说,在讲述C语言的书上是找不到相关资料的。原来上学时,老师讲得也是不明不白的,心里总是感觉不舒服,估计那老师也是搞不清楚的。这是为了授课准备的教案,自己看看吧。
产生误差的原因就在于有效数字的一部分由于空间的限制,被舍弃掉了。自己动手亲自来算一下,就会明白了。
System.out.println((double)(a * a) / (1000D * 1000D));
如: BigDecimal a =BigDecimal.valueOf(1.255);
BigDecimal b=a.multiply(a);//a*a
System.out.println(b);就是你要计算的值。只是在这种大数值中不能使用+ * 这些算术预算符。