float f1 = 0.1f;
double f2 = 1/10;
System.out.println(f1);
System.out.println(f2);
System.out.println(f1==f2);
System.out.println("------------");
float f3 = 1234123412341234f;
float f4 = f3 + 1;
System.out.println(f3);
System.out.println(f4);
System.out.println(f3==f4);
执行结果:
在上述代码中,
- 上述double类型定义的计算中,因为1与10均是整形,所以结果自动转化为了整形,想要得到0.1应改为double f2 = 1.0/10或double f2 = 1/10.0;
- 因为float类型能表示的数范围是有限的,其表示的值是离散的、舍入误差后的结果、是接近但不完全相等的结果,所以f1≠f2;
- 由于f3数值过大,已超出float能表达的范围,之后的任何运算都是不能改变原有数值且无效的,所以f3=f4.
- 可以使用BigDecimal类来精确比较.