【问题标题】:Why can't i convert from Fahrenheit to Celsius? [closed]为什么我不能从华氏温度转换为摄氏度? [关闭]
【发布时间】:2015-01-19 18:11:33
【问题描述】:

我的 C# 代码不断返回错误的转换结果。据我所知,转换公式是正确的,但总是显示错误的结果。

例如:70°F 给我 12,777777 °C。你能看看我的代码吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Temperature
{
    class Program
    {    
        class Temperature
        {
            public double temp;

            public void Convert(double value)
            {
                double tEmp;
                tEmp = (value - 32) / 1.8;
                Console.WriteLine("The temperature in °C is :" + tEmp);
                Console.ReadKey();
            }
        }

        static void Main(string[] args)
        {
            double f;
            Temperature c = new Temperature();
            f = Console.Read();
            c.Convert(f);
        }
    }
}

【问题讨论】:

  • 你期待什么结果?
  • 公式为(°F - 32) x 5/9 = °C
  • @PatrickHofman 有什么区别?
  • @EldarDordzhiev:只为那些不是每天都这样做的人。像我一样。
  • @DavidHeffernan 确实如此。如果你尝试运行这个程序,你会得到描述的结果。然而,这个问题可以通过简单地在Convert 中设置一个断点并查看value 是什么来解决。

标签: c#


【解决方案1】:

你的问题是

f = Console.Read();

它只读取第一个字符,而不是您的整行输入。试试

f = Convert.ToDouble(Console.ReadLine());

Here's 一个很好的答案 Console.ReadConsole.ReadLine() 之间的区别

【讨论】:

  • 正确,这是问题的根源,但你应该解释为什么 70Console.Read给出12.78而不是21.11
  • Console.Read 返回一个 Int32,它表示已读取的单个字符或 -1。见msdn.microsoft.com/en-us/library/system.console.read
  • 谢谢。我不知道“Convert.ToDouble”方法。
【解决方案2】:

Console.Read() 返回输入流中下一个字符的序数值。

输入流中的第一个字符是'7',它的序号为0x0037。用十进制表示,这是55(55-32)/1.812.7777

您应该使用Console.ReadLine() 而不是Console.Read()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2012-06-21
    • 2021-10-23
    • 1970-01-01
    相关资源
    最近更新 更多