public class Test{
public static void main(String[] args){
System.out.println(2.0-1.1);
}
}因为1.1不能用二进制精确表示,有截断误差,在存入时已经不是1.1了但是在算4.0-1.1时,结果就是2.9,而4.0-3.1时结果又是0.8999999999999999999999999999999999了呢?
public static void main(String[] args){
System.out.println(2.0-1.1);
}
}因为1.1不能用二进制精确表示,有截断误差,在存入时已经不是1.1了但是在算4.0-1.1时,结果就是2.9,而4.0-3.1时结果又是0.8999999999999999999999999999999999了呢?
可能小于1是flout 大于1是double 自动装箱的类型是jdk定的!
public static void main(String args[]){
System.out.println(2.00 - 1.10);
}
}你可能会很天真地期望该程序能够打印出0.90,但是它如何才能知道你想要打印小数点后两位小数呢?
如果你对在Double.toString文档中所设定的将double类型的值转换为字符串的规则有所了解,你就会知道该程序打印出来的小数,是足以将double类型的值与最靠近它的临近值区分出来的最短的小数,它在小数点之前和之后都至少有一位。因此,看起来,该程序应该打印0.9是合理的。 这么分析可能显得很合理,但是并不正确。如果你运行该程序,你就会发现它打印的是0.8999999999999999。问题在于1.1这个数字不能被精确表示成为一个double,因此它被表示成为最接近它的double值。该程序从2中减去的就是这个值。遗憾的是,这个计算的结果并不是最接近0.9的double值。表示结果的double值的最短表示就是你所看到的打印出来的那个可恶的数字。更一般地说,问题在于并不是所有的小数都可以用二进制浮点数来精确表示的。
-------------------------
为啥