2011-04-10 123 views
2

我正在爲Windows Phone 7製作一個計算器應用程序,而且我正在努力應對數字分組。下面的代碼:計算器如何完成數字分組。例如數字分組數字與Windows 7計算器的數字分組方式相同

爲mynumber = myNumber.Replace( 「」,的String.Empty);

  int dot = myNumber.IndexOf("0."); 

      strNumberWithoutDecimals = myNumber.Substring(0, (dot == -1 ? myNumber.Length : dot)); 
      strNumberDecimals = (dot == -1 ? "" : myNumber.Substring(dot)); 

      try 
      { 
       strNumberWithoutDecimals = Convert.ToDouble(strNumberWithoutDecimals).ToString("#,##0.000000000"); 
      } 
      catch (Exception) 
      { 
       //Ignore ... for now. 
      } 

      total = strNumberWithoutDecimals + strNumberDecimals; return total; 

問題是當用戶輸入說0.323和數字分組打開時,數字不能爲負數。它不會工作。 0.323不能成爲-0.323,我不知道爲什麼。任何幫助將不勝感激。提前致謝。

回答

1

你應該熟悉C#字符串格式化的支持,無論是在輸入和輸出。

http://blog.stevex.net/string-formatting-in-csharp/

使用Double.TryParse()與包括樣式信息的重載之一。

例如TryParse(string s, NumberStyles style, IFormatProvider provider, out double result)

(應該是整數,小數,浮點數,等這取決於您所需要的精確度類似的方法)。

這種方法也可以讓你的應用更加友好的國際化,因爲不同的文化對於使用數字分組(如許多歐洲文化做1.234.567,89代表1,234,567.89)

TryParse(string s, out double result)也應該工作,但較少的不同約定控制輸入​​字符串的格式。

這些是功能上等同的:

 double answer; 
     var result = Double.TryParse("123,456.78", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.CurrentUICulture, out answer); 
     Console.WriteLine("result: {0} answer {1}", result, answer); 

     result = Double.TryParse("123,456.78", out answer); 
     Console.WriteLine("result: {0} answer {1}", result, answer); 

注意NumberStyles.Float是其他的NumberStyles的複合材料(例如NumberStyles.AllowLeadingSignNumberStyles.AllowDecimalPoint等)。

無需手動去掉逗號,等等!

更多信息,請參見MSDN

+0

你能告訴我一個如何使用Double.TryParse()和一些代碼的例子嗎? – Navio53 2011-04-10 22:04:45

+0

已經更新了與相關MSDN頁面的鏈接的答案,下面是一個使用基於文化的語法分析的詳細示例,我相信。 – 2011-04-10 22:06:39

+0

這就是我得到的,但它沒有做任何事情。字符串val2 = inputPanelTextBox.Text; styles = NumberStyles.AllowDecimalPoint&NumberStyles.AllowThousands; culture = CultureInfo.CurrentCulture;如果(Double.TryParse(val2,styles,culture,out answer)) inputPanelTextBox.Text =「」+ answer; – Navio53 2011-04-10 22:28:18