今天发现了一个有趣的东西。
看下面的代码:
/**
*
* @author lixiang
* @date 2019年05月31日 - 10:15
* @history 2019年05月31日 - 10:15 lixiang create.
*/
public static void main(String[] args) {
System.out.print(1*0.1 == 0.1); System.out.println(" " + 1*0.1);
System.out.print(2*0.1 == 0.2); System.out.println(" " + 2*0.1);
System.out.print(3*0.1 == 0.3); System.out.println(" " + 3*0.1);
System.out.print(4*0.1 == 0.4); System.out.println(" " + 4*0.1);
System.out.print(5*0.1 == 0.5); System.out.println(" " + 5*0.1);
System.out.print(6*0.1 == 0.6); System.out.println(" " + 6*0.1);
System.out.print(7*0.1 == 0.7); System.out.println(" " + 7*0.1);
System.out.print(8*0.1 == 0.8); System.out.println(" " + 8*0.1);
System.out.print(9*0.1 == 0.9); System.out.println(" " + 9*0.1);
}
运行结果:
true 0.1
true 0.2
false 0.30000000000000004
true 0.4
true 0.5
false 0.6000000000000001
false 0.7000000000000001
true 0.8
true 0.9
发现3*0.1 和 6*0.1 和 7*0.1
出现了很长一串尾巴。
再看下面代码:
/**
*
* @author lixiang
* @date 2019年05月31日 - 10:15
* @history 2019年05月31日 - 10:15 lixiang create.
*/
public static void main(String[] args) {
System.out.print(0.3*1 == 0.3); System.out.println(" " + 1*0.3);
System.out.print(3*0.1 == 0.3); System.out.println(" " + 3*0.1);
System.out.print(0.6*1 == 0.6); System.out.println(" " + 1*0.6);
System.out.print(6*0.1 == 0.6); System.out.println(" " + 6*0.1);
System.out.print(0.7*1 == 0.7); System.out.println(" " + 0.7*1);
System.out.print(7*0.1 == 0.7); System.out.println(" " + 7*0.1);
}
运行结果:
true 0.3
false 0.30000000000000004
true 0.6
false 0.6000000000000001
true 0.7
false 0.7000000000000001
很有趣哈。3*0.1 == 0.3 为false 0.3*1 == 0.3 为true
,
网上给出的观点是:
有些浮点数不能完全精确的表示出来。
因此,我们应该避免在代码中使用上面出现的这种浮点数运算。
然后求知欲又让我找了这篇知乎,确实这才是真大牛!
为什么java里面30.1=0.30000000000000004,而40.1=0.4?
感觉自己是个假的程序猿,泪奔。