因为正反不能转换,0.1是double类型。
对于任何一个float类型的浮点数,float类型的包装类Float提供了一个静态方法floatToIntBit(float f)用于获取
与f对应的32位二进制数据流转换为int类型的数据,然后返回这个int类型的数据
float f=0.1F;
System.out.println(Float.floatToIntBit(f));//打印1036831949
把得到的数除以2求余数
把余数反过来得到32位二进制数据:
0 01111011 10011001100110011001101
s=0 e=123 尾数部分的隐含位为1 所以尾数是1.10011001100110011001101
以上二进制数据流对应的二进制数学运算表达式为:
(-1)^0*2^123-127*1.10011001100110011001101
即2^-4*1.10011001100110011001101
即2^23*1.10011001100110011001101*2^-27
即110011001100110011001101*2^-27
即13421773*2^-27
=0.100000001490116119384765625
与0.1误差0.000000001490116119384765625
Java是强类型语言,在其中1.0默认是double类型,会自动认为是double类型的值,java不会为我们自动转换,只会报错提醒。
修改的方法有两个:
明确指定0.1是个单精度浮点数,然后赋值给f1. 即 float f1= 0.1f ; //后加f
手动强制转换 float f1 = (float) 0.1;