探究背景
涉及诸如float或者double这两种浮点型数据的处理时,偶尔总会有一些怪怪的现象,不知道大家注意过没,举几个常见的栗子:
条件判断超预期
System.out.println( 1f == 0.9999999f ); // 打印:false System.out.println( 1f == 0.99999999f ); // 打印:true
数据转换超预期
float f = 1.1f; double d = (double) f; System.out.println(f); // 打印:1.1 System.out.println(d); // 打印:1.100000023841858
基本运算超预期
System.out.println( 0.2 + 0.7 ); // 打印:0.8999999999999999 纳尼?
数据自增超预期
float f1 = 8455263f; for (int i = 0; i < 10; i++) { System.out.println(f1); f1++; } // 打印:8455263.0 // 打印:8455264.0 // 打印:8455265.0 // 打印:8455266.0 // 打印:8455267.0 // 打印:8455268.0 // 打印:8455269.0 // 打印:8455270.0 // 打印:8455271.0 // 打印:8455272.0 float f2 = 84552631f; for (int i = 0; i < 10; i++) { System.out.println(f2); f2++; } // 打印:8.4552632E7 纳尼?不是 +1了吗? // 打印:8.4552632E7 纳尼?不是 +1了吗? // 打印:8.4552632E7 纳尼?不是 +1了吗? // 打印:8.4552632E7 纳尼?不是 +1了吗? // 打印:8.4552632E7 纳尼?不是 +1了吗? // 打印:8.4552632E7 纳尼?不是 +1了吗? // 打印ÿ