Android开发中Java代码出现double无法转换为Float编译错误求助
为什么代码会出现「double无法转换为Float」的错误?
问题代码
bmi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Float weightKg,heightmeter1,heightmeter2,TotalHeight,BMI; String sweight = kg.getText().toString(); weightKg = Float.parseFloat(sweight); String sfeet = feet.getText().toString(); float heightFeet = Float.parseFloat(sfeet); heightmeter1 = heightFeet *0.3048; String sinch = inch.getText().toString(); float heightInch = Float.parseFloat(sinch); heightmeter2 =heightInch*0.0254; TotalHeight = heightmeter1+heightmeter2; BMI = weightKg + (TotalHeight*TotalHeight); displaybmi.setText(" Your BMI Is = "+BMI+" "); } });
编译错误信息
C:\Users\USER\Desktop\Social_Media\app\src\main\java\com\example\social_media\MainActivity.java:73: error: incompatible types: double cannot be converted to Float heightmeter1 = heightFeet *0.3048; ^ C:\Users\USER\Desktop\Social_Media\app\src\main\java\com\example\social_media\MainActivity.java:77: error: incompatible types: double cannot be converted to Float heightmeter2 =heightInch*0.0254; ^
原因分析
Java中,0.3048、0.0254这类小数字面量默认是double类型。当float类型变量(比如heightFeet、heightInch)和double字面量相乘时,运算结果会自动提升为double类型。但Java不允许自动将double赋值给Float——这属于会丢失精度的窄化转换,因此直接赋值会触发编译错误。
解决方法
有两种可行的修复方式:
- 方式一:将小数字面量改为float类型
在小数后加f后缀,让字面量变为float类型,运算结果也会是float,可直接赋值给Float变量:heightmeter1 = heightFeet * 0.3048f; heightmeter2 = heightInch * 0.0254f; - 方式二:显式强制类型转换
把运算结果强制转换成Float类型,不过这种方式可能损失精度,仅在必要时使用:heightmeter1 = (Float) (heightFeet * 0.3048); heightmeter2 = (Float) (heightInch * 0.0254);
额外提示
代码里的BMI计算公式错误,正确的BMI应为体重除以身高的平方,需修改为:
BMI = weightKg / (TotalHeight * TotalHeight);
内容的提问来源于stack exchange,提问作者DesTroYer
相关产品推荐
相关产品推荐

