保证你要猜错(一)
程序员文章站
2022-05-08 17:59:49
...
《保证你要猜错》是我07年在内部bbs发的几个语法题,大部分来自《java解惑》一书。欲激发内部的技术讨论氛围 ,现在整理转发。
想想输出结果是多少
public class Change{
public static void main(String args[]){
System.out.println(2.00 - 1.10);
}
}
答案:
这是正经的程序问题.
1.1这个数字不能被精确表示成为一个double,因此它被表示成为最接近它的double值,大概是1.100000000000...1
所以2.00-1.10=0.8999999999999999.
问题就是在于并不是所有的小数都可以用二进制浮点数来精确表示。可以参考Double.valueOf(String)和 toString(double)方法的javadoc. 因此精确计算必须用BigDecimal。同理,在Javascript中也有类似误差。
【2007-5-29 bbs】