【问题标题】:Cannot implicitly convert type 'double' to 'float'无法将类型“double”隐式转换为“float”
【发布时间】:2013-10-30 09:07:18
【问题描述】:

我正在做一个简单的程序,用开尔文、摄氏和华氏转换温度,但在用开尔文做任何事情时出现此错误:

Cannon implicitly convert type 'double' to 'float'

发生错误的行:

public static float FahrenheitToKelvin(float fahrenheit)
{
    return ((fahrenheit - 32) * 5) / 9 + 273.15;
}

按钮点击:

private void button1_Click(object sender, EventArgs e)
{
    var input = float.Parse(textBox1.Text);
    float FahrenResult = FahrenheitToCelsius(input);
    textBox2.Text = FahrenResult.ToString();
    float KelvinResult = FahrenheitToKelvin(input);
    textBox3.Text = KelvinResult.ToString();
}

以及我正在尝试制作的测试方法:

[TestMethod]
public void fahrenheitToKelvinBoiling()
{
    float fahrenheit = 212F;
    float expected = 373.15F; // TODO: Initialize to an appropriate value
    float actual;
    actual = Form1.FahrenheitToKelvin(fahrenheit);
    Assert.AreEqual(Math.Round(expected, 2), Math.Round(actual, 2));
    // Assert.Inconclusive("Verify the correctness of this test method.");
}

【问题讨论】:

    标签: c# asp.net visual-studio-2010


    【解决方案1】:

    试试这个。

        public static float FahrenheitToKelvin(float fahrenheit)
        {
            return ((fahrenheit - 32f) * 5f) / 9f + 273.15f;
        }
    

    这是有效的,因为它改变了编译器将 32 5 等识别为双精度。数字后面的 f 告诉编译器它是一个浮点数。

    【讨论】:

    • 如果解决了,请将问题标记为已解决,然后单击复选标记以使其成为问题的答案。
    • 是的,我通常会这样做。但是是的,我应该解释一下。我会解释一下。
    • 酷,虽然最突出的一点是 OP 一直在使用浮点数(或者他认为),但所有类似十进制的文字默认情况下都是 double 除非它们有诸如 @987654323 之类的限定符@ 或 M。一旦你开始对 double 进行操作,所有其他操作数都会隐式转换为双精度数,因此结果不能隐式包含在 float 返回类型中。
    • OO 感谢您提供的信息。我对编程还是很陌生。我不知道。
    【解决方案2】:

    编译器正在将结果表达式提升为双精度。我认为它假设那些包含小数部分的数字是双倍的。

    尽管如此,您可以将结果值显式转换为浮点数;

    或者您可以尝试将所有具有小数分隔符的常量显式转换为浮点数。

    编辑

    附带说明一下,您是否完全习惯使用浮点数(或双精度数)而不是小数?我没有看到您的代码,最终在向用户界面显示数据时通过调用 ToString() 方法,将值四舍五入到一定数量的精度数字(尽管你的单元测试做到了)。

    您可能会在浮动结束时得到一些“丢失”的精度数字,它们将通过使用 ToString() 显示在 UI 上。

    我强烈建议:

    1. 使用四舍五入到一定的小数精度
    2. 将浮点数更改为小数

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      相关资源
      最近更新 更多