C#温度转换程序计算错误排查求助(附代码)
温度转换程序错误分析与修复
问题原因
你代码的计算逻辑完全错误,核心问题出在整数除法上。在C#里,如果两个整数做除法(比如5/9或9/5),结果会自动取整,不会保留小数部分:
5/9的计算结果是0,不是实际需要的0.555...9/5的计算结果是1,不是实际需要的1.8
拿你提到的-40度转换举例:
- 把-40°F转°C时,计算式变成
(-40-32)*0,结果为0,完全不符合实际 - 把-40°C转°F时,计算式变成
-40*1 +32,结果为-8,同样错误
解决方法
只需要把除法运算里的其中一个数改成浮点数(加个.0即可),让C#执行浮点除法而非整数除法。另外可以简化重复代码,比如合并大小写判断:
修复后的代码:
// 声明变量 double temp = 0; double newTemp = 0; string? cf = ""; // 询问转换方向 Console.WriteLine("要转换到哪种单位?输入c表示摄氏度,f表示华氏度:"); cf = Console.ReadLine(); // 统一转小写,减少重复判断 if (cf?.ToLower() == "c") { Console.WriteLine("转换为摄氏度,请输入华氏温度:"); temp = Convert.ToDouble(Console.ReadLine()); newTemp = (temp - 32) * (5.0 / 9); // 用5.0触发浮点除法 Console.WriteLine($"转换后的温度是 {newTemp} 摄氏度。"); } else if (cf?.ToLower() == "f") { Console.WriteLine("转换为华氏度,请输入摄氏温度:"); temp = Convert.ToDouble(Console.ReadLine()); newTemp = (temp * (9.0 / 5)) + 32; // 用9.0触发浮点除法 Console.WriteLine($"转换后的温度是 {newTemp} 华氏度。"); } else { Console.WriteLine("输入无效,请下次输入c或f。"); Environment.Exit(0); }
什么是Floating-Point(浮点)
简单来说,浮点数是一种用来存储带小数的数字的数据类型(比如C#里的double就是典型的浮点类型)。和只能表示完整整数的整数类型不同,浮点数可以表示像0.555...、1.8这类非整数数值,适合温度、重量、距离这类需要精确小数计算的场景。
内容的提问来源于stack exchange,提问作者Aiden Scheben
相关产品推荐
相关产品推荐

