2012-11-14 18 views
1

這是我的Windows應用程序的一個佈局,將攝氏轉換爲華氏。問題是,當我嘗試輸入溫度時會顯示一些垃圾(例如:如果我輸入'3'則顯示'3.0000009'),有時它甚至會顯示堆棧溢出異常。輸出也沒有正確顯示:我如何讓應用程序正確輸入..?

cel.text是攝氏的文本框。 fahre.text是華氏文本框。

namespace PanoramaApp1 
{ 
    public partial class FahretoCel : PhoneApplicationPage 
    { 
    public FahretoCel() 
    { 
     InitializeComponent(); 

    } 

    private void fahre_TextChanged(object sender, TextChangedEventArgs e) 
    { 

     if (fahre.Text != "") 
     { 
      try 
      { 
       double F = Convert.ToDouble(fahre.Text); 
       cel.Text = "" + ((5.0/9.0) * (F - 32)) ; //this is conversion expression 

      } 

      catch (FormatException) 
      { 
       fahre.Text = ""; 
       cel.Text = ""; 
      } 

     } 
     else 
     { 
      cel.Text = ""; 
     } 
    } 

    private void cel_TextChanged(object sender, TextChangedEventArgs e) 
    { 

     if (cel.Text != "") 
     { 
      try 
      { 
       Double c = Convert.ToDouble(cel.Text); 
       fahre.Text = "" + ((c *(9.0/5.0)) + 32); 

      } 
      catch (FormatException) 
      { 
       fahre.Text = ""; 
       cel.Text = ""; 
      } 

     } 
     else 
     { 
      fahre.Text = ""; 
     } 
    } 

} 
} 

回答

1

您可以使用Math.Round將值舍入爲小數點後所需的位數。舍入到零將刪除小數部分。

變化

cel.Text = "" + ((5.0/9.0) * (F - 32)) ; 

cel.Text = Math.Round(((5.0/9.0) * (F - 32)), 2).ToString() ; 
+0

+0這似乎不是OP的問題 –

+0

它甚至顯示堆棧溢出異常部分問題呢? – Zbigniew

2

這是怎麼回事,是你的Text_Changed事件處理程序被觸發每個-了,他們是不斷變化的每一個,其他的文字。

當你從攝氏溫度轉換成華氏溫度時,它會無限轉換。

這解釋了您的堆棧溢出錯誤和輸入的文本更改。

我會做什麼,我會用按鈕執行轉換還是可以有一個布爾變量打開或關閉其他事件處理程序。

想象這樣的事情

protected bool textChangedEnabled = true; 

private void cel_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    if(textChangedEnabled) 
    { 
     textChangedEnabled = false; 
     if (cel.Text != "") 
     { 
      try 
      { 
       Double c = Convert.ToDouble(cel.Text); 
       fahre.Text = "" + ((c *(9.0/5.0)) + 32); 

      } 
      catch (FormatException) 
      { 
       fahre.Text = ""; 
       cel.Text = ""; 
      } 

     } 
     else 
     { 
      fahre.Text = ""; 
     } 
     textChangedEnabled = true; 
    } 
} 

有可能完成它更優雅,更線程安全的方式,但是這只是一個簡單的解決。

+0

@des我只是編輯了我的答案。您的事件處理程序會導致每個其他人觸發,並且「3.0000009」是其間的舍入錯誤的結果。 –

+0

是的,現在我明白了,這解釋了所有問題。 – Zbigniew

+0

非常感謝...我會嘗試..! – user1824343

相關問題