2013-02-19 113 views
1

我是C#的新手,我正在製作一個計算器,我想做一個簡單的計算,但它無法正常工作。將double轉換爲字符串1

這裏是當前行:

Convert.ToString(Convert.ToDouble(A.Text)+Convert.ToDouble(B.Text)+Convert.ToDouble(C.Text)); 

這裏是1.1的樣品輸出在每個文本框: 1.1 + 1.1 + 1.1 = 33

+7

所以,你是C#的新手,看起來像C#。爲什麼添加C++和VBA標籤?他們與你的問題無關。此外,你的問題不是特定於Windows,所以標籤也是無效的。最後,當使用MonoDevelop而不是Visual Studio時,你會得到相同的結果,所以再次使用無效標記。這裏只有C#有效。 – 2013-02-19 10:56:52

+0

請閱讀[常見問題]和[問]幾次.. – 2013-02-19 10:58:18

+1

Convert.ToDouble使用當前的文化。如果這種文化是德國的,那麼'.'是組分隔符,而不是小數點。 – CodesInChaos 2013-02-19 10:58:34

回答

3

的問題是,你是不是指定培養在您的轉換中。很可能你有德國文化(或其他歐洲文化),它使用點作爲組分隔符,而不是小數點。結果是1.1被解釋爲11

解決辦法有兩個:

  1. 在當前的文化輸入你的號碼:1,1(首選)
  2. 使用不變的文化解析數字:

    Convert.ToString(
        Convert.ToDouble(A.Text, CultureInfo.InvariantCulture) + 
        Convert.ToDouble(B.Text, CultureInfo.InvariantCulture) + 
        Convert.ToDouble(C.Text, CultureInfo.InvariantCulture), 
        CultureInfo.InvariantCulture) 
    

的第一種方法是首選,因爲它可以確保用戶始終可以在自己的文化中輸入數字。強迫某種文化對用戶來說是20年前可以接受的事情,但不是現在。

+0

我該如何改變我的文化?還是讓它接受? – cenh 2013-02-19 11:02:14

+0

@ChristianEngelsborgNaumannH:請參閱我的回答更新。 – 2013-02-19 11:03:50

+0

@ChristianEngelsborgNaumannH:同時接受兩者是不可能的。當你輸入1.001時,你將無法知道用戶的意思。它可以是'1001'(如果用德國文化解釋)或'1.001'(如果用不變文化解釋)。 – 2013-02-19 11:06:19

-1

您需要計算總和,然後將這些部分加在一起。 String.Format是連接字符串的好方法。

double sum = Convert.ToDouble(A.Text)+Convert.ToDouble(B.Text)+Convert.ToDouble(C.Text); 
string resultStr = String.Format("{0}+{1}+{2}={3}", A.Text, B.Text, C.Text, sum); 
+0

-1:這不能解決問題。 – 2013-02-19 11:05:04

-2

您應該分配您的中間結果爲雙可變第一,然後把它放到一個字符串,即

double d = Double.Parse(A.Text) + Double.Parse(B.Text) + Double.Parse(C.Text); 

最終,你可以叫

string result = d.ToString(); 

這是遠更輕鬆。

請參閱here

+0

-1:這不能解決問題。 – 2013-02-19 11:06:49

相關問題