整数与浮点数运算结果异常:为何小数位被置为0?
问题分析:温度转换结果小数位丢失原因
先看你的代码:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int tempC = input.nextInt(); float tempF = (tempC * 9 / 5) + 32; System.out.println(tempF); } }
核心原因:整数运算的截断特性
tempC是int类型,9和5也都是整数字面量,所以tempC * 9 / 5全程按照整数运算规则执行。- 整数除法会直接舍弃小数部分,只保留整数商。比如当输入为43时,
43*9=387,387/5的整数结果是77(丢掉了0.4的小数部分),再加32得到109,最后赋值给float类型时就变成了109.0,自然看不到预期的小数位。
修复方法
只需要让运算过程中触发浮点运算即可,比如修改任意一个参与运算的数值为浮点类型:
// 方法1:把9改成浮点字面量9.0f float tempF = (tempC * 9.0f / 5) + 32; // 方法2:先把tempC强制转换为float float tempF = ((float)tempC * 9 / 5) + 32;
这样运算时会保留小数部分,最终就能输出109.4的正确结果。
内容的提问来源于stack exchange,提问作者Abhilash0496
相关产品推荐
相关产品推荐

