java,为什么float f1=0.1是错的? 0.1是double类型的吗?

如题所述

因为正反不能转换,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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-04

Java是强类型语言,在其中1.0默认是double类型,会自动认为是double类型的值,java不会为我们自动转换,只会报错提醒。

修改的方法有两个:

    明确指定0.1是个单精度浮点数,然后赋值给f1. 即 float f1= 0.1f ; //后加f

    手动强制转换  float f1 = (float) 0.1;  

相似回答