2013-10-30 65 views
3

我做一個簡單的程序與開爾文,攝氏和華氏溫度轉換,但與開爾文做任何事情時,我得到這個錯誤:無法隱式轉換類型「雙」到「浮動」

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."); 
} 

回答

6

試試這個。

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

這是可行的,因爲它將編譯器從識別32 5等變爲雙打。數字後面的f告訴編譯器它是一個浮點數。

+0

這個工作,謝謝。 – user2767155

+0

如果這解決了它,請將問題標記爲已解決,並單擊複選標記以使其成爲問題的答案。 – deathismyfriend

+0

雅我通常這樣做。但是,我應該解釋。我會解釋一下。 – deathismyfriend

0

編譯器正在將結果表達式提升爲double。我認爲它假定那些包含小數部分的數字是雙倍的。

不過,您可以顯式地將結果值轉換爲浮點數;

或者您可以嘗試將所有具有小數點分隔符的常量顯式轉換爲浮點型。

編輯

作爲一個側面說明,你是完美的舒適與使用花車(或雙打),而不是小數?通過調用ToString()方法,將數值四捨五入到一定數量的精度數字(雖然您的單元測試完成),但我沒有看到您的代碼,最終將數據顯示到用戶界面

您可能會在浮點數的末尾獲得一些「丟失的」精度數字,並使用ToString()將它們顯示到UI中。

我強烈建議之一:

  1. 使用圓形一定小數精度
  2. 更改花車到小數點
相關問題