You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:31:03