我是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
我是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
的問題是,你是不是指定培養在您的轉換中。很可能你有德國文化(或其他歐洲文化),它使用點作爲組分隔符,而不是小數點。結果是1.1
被解釋爲11
。
解決辦法有兩個:
1,1
(首選)使用不變的文化解析數字:
Convert.ToString(
Convert.ToDouble(A.Text, CultureInfo.InvariantCulture) +
Convert.ToDouble(B.Text, CultureInfo.InvariantCulture) +
Convert.ToDouble(C.Text, CultureInfo.InvariantCulture),
CultureInfo.InvariantCulture)
的第一種方法是首選,因爲它可以確保用戶始終可以在自己的文化中輸入數字。強迫某種文化對用戶來說是20年前可以接受的事情,但不是現在。
我該如何改變我的文化?還是讓它接受? – cenh 2013-02-19 11:02:14
@ChristianEngelsborgNaumannH:請參閱我的回答更新。 – 2013-02-19 11:03:50
@ChristianEngelsborgNaumannH:同時接受兩者是不可能的。當你輸入1.001時,你將無法知道用戶的意思。它可以是'1001'(如果用德國文化解釋)或'1.001'(如果用不變文化解釋)。 – 2013-02-19 11:06:19
您需要計算總和,然後將這些部分加在一起。 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);
-1:這不能解決問題。 – 2013-02-19 11:05:04
您應該分配您的中間結果爲雙可變第一,然後把它放到一個字符串,即
double d = Double.Parse(A.Text) + Double.Parse(B.Text) + Double.Parse(C.Text);
最終,你可以叫
string result = d.ToString();
這是遠更輕鬆。
請參閱here。
-1:這不能解決問題。 – 2013-02-19 11:06:49
所以,你是C#的新手,看起來像C#。爲什麼添加C++和VBA標籤?他們與你的問題無關。此外,你的問題不是特定於Windows,所以標籤也是無效的。最後,當使用MonoDevelop而不是Visual Studio時,你會得到相同的結果,所以再次使用無效標記。這裏只有C#有效。 – 2013-02-19 10:56:52
請閱讀[常見問題]和[問]幾次.. – 2013-02-19 10:58:18
Convert.ToDouble使用當前的文化。如果這種文化是德國的,那麼'.'是組分隔符,而不是小數點。 – CodesInChaos 2013-02-19 10:58:34