2011-04-10 3 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)

(필요한 정밀도에 따라 Integer, Decimal, Float 등의 유사한 메서드가 있어야합니다.)

다른 문화가 자리 그룹에 대해 서로 다른 규칙 (예를 들어, 많은 유럽 문화가 1,234,567.89를 대표하는 1.234.567,89을)

TryParse(string s, out double result)는 적은 비용으로 작동해야하지만를 사용으로 이러한 접근 방식은 또한 앱이 더 국제화하기 쉬운 것 입력 문자열의 형식을 제어합니다.

이러한 기능적 등가 : NumberStyles.Float 다른 NumberStyles의 합성 (예컨대 NumberStyles.AllowLeadingSign, NumberStyles.AllowDecimalPoint 등) 인

 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); 

참고있다.

쉼표 등을 수동으로 제거 할 필요가 없습니다.

자세한 내용은 MSDN을 참조하십시오.

+0

Double.TryParse()를 몇 가지 코드와 함께 사용하는 방법의 예를 보여줄 수 있습니까? – Navio53

+0

관련된 MSDN 페이지에 대한 링크로 답변이 업데이트되었으므로 문화 기반 파싱을 사용하여 상세한 예가 있다고 생각합니다. –

+0

이것이 내가 얻은 것입니다.하지만 아무 것도하지 않습니다. string val2 = inputPanelTextBox.Text; styles = NumberStyles.AllowDecimalPoint & NumberStyles.AllowThousands; culture = CultureInfo.CurrentCulture; if (Double.TryParse (val2, 스타일, 문화, 응답)) inputPanelTextBox.Text = ""+ 답변; – Navio53