2011-02-14 8 views
3

다음 문장을 사용하여 3 개의 텍스트 상자의 값을 합산하려고합니다. 그러나 제대로 작동하지 않는 것 같습니다. 3 개의 텍스트 상자에는 십진수로 표시된 값이 있습니다. 오류 : mscorlib.dll에서 'System.FormatException'형식의 처리되지 않은 예외가 발생했습니다. 추가 정보 : 입력 문자열의 형식이 올바르지 않습니다.C# 문 텍스트 상자 합계

 decimal num1, num2, num3, total; 
     num1 = Convert.ToDecimal(SSubTotalTextBox.Text); 
     num2 = Convert.ToDecimal(SubTotalMTextBox.Text); 
     num3 = Convert.ToDecimal(SubTotalTextBox3.Text); 
     total = num1 + num2 + num3; 
     TotalAmountTextBox.Text = Convert.ToString(total); 
+0

무엇이 오류입니까? – oopbase

+0

mscorlib.dll에서 'System.FormatException'형식의 처리되지 않은 예외가 발생했습니다. 추가 정보 : 입력 문자열의 형식이 올바르지 않습니다. – pacheco

+0

텍스트 상자 중 하나의 예제 콘텐츠를 제공 할 수 있습니까? –

답변

3

이 충분하지 않은 질문의 세부 사항,하지만 내 직감이이 문제가 나에게 말한다 : 당신은 40,5 같은 텍스트 상자의 콘텐츠를

하지만, 컴퓨터 현재의 문화가있다 소수 자릿수는 으로 설정합니다 (점). 따라서 이해가 안되기 때문에 40,5를 10 진수로 변환하는 동안 예외가 발생합니다.

다른 방법으로도 쓸 수 있고 40.5를 쓰고 있지만 40.5가 될 것으로 예상됩니다.

편집

나는 플로리안 폰 Spiczak 대답에 코멘트를 보았다, 문자 $가 텍스트 상자에 존재하는 것 같다. 그것이 그렇다면, 그것은 분명히 문제입니다.

Convert.ToDecimal 호 내의 모든 textBox.TexttextBox.Text.Replace("$","")으로 바꾸어보십시오. 그것은 $를 제거하고 적절하게 구문 분석해야합니다.

decimal num1, num2, num3, total; 
num1 = Convert.ToDecimal(SSubTotalTextBox.Text.Replace("$","")); 
num2 = Convert.ToDecimal(SubTotalMTextBox.Text.Replace("$","")); 
num3 = Convert.ToDecimal(SubTotalTextBox3.Text.Replace("$","")); 
total = num1 + num2 + num3; 
TotalAmountTextBox.Text = "$ "+ total; 

또한, 당신이 decimal.Parse 또는 decimal.TryParseConvert.ToDecimal을 교체해야하고, 실제로 당신의 텍스트 상자 내부에 기록 된 내용에 일부 유효성 검사 논리를 추가

그래서 전체 코드는 다음이어야한다.

+0

예, $가 문제인 것처럼 보입니다. 많은 감사합니다 !! – pacheco

0

모든 입력란에 값을 입력 했습니까? 변환은 빈 문자열을 좋아하지 않을 수 있습니다. 또한 변환 대신 decimal.Parse 또는 decimal.TryParse를 시도 할 수 있습니다.

편집 : 문화가 문제라고 생각하지 않습니다. 6,4와 함께 들어가고 문화가 6.4를 기대한다고해도, 일반적으로 1000의 분리 자로 해석되며 6.4 대신 64가됩니다. 대신 Convert.ToDecimal의 시도의

+0

시도했지만 decimal.Parse하지만 아무 소용이 없습니다. '십진수'를 '문자열'로 변경하면 총 텍스트 상자에 I.E $ 5.00 + $ 10.00 + $ 30의 3 개의 문자열이있는 것으로 보이지만 3 개의 값을 합한 것은 아닙니다. – pacheco

+0

@pacheco 글쎄, "$ 5.00"문자열을 10 진수로 변환하려고합니다. 그것은 작동하지 않습니다. 대신 텍스트 상자 개체 (SSubTotalTextBox.Value?)의 속성이 "$"기호가 들어있는 텍스트 대신 입력 값을 제공하는지 확인하십시오. – tzup

+0

이렇게 해보셨습니까? 'decimal num1, num2, num3, total; decimal.TryParse (SSubTotalTextBox.Text, out num1); decimal.TryParse (SubTotalMTextBox.Text, out num2); decimal.TryParse (SubTotalTextBox.Text, out num3); total = num1 + num2 + num3; TotalAmountTextBox.Text = Convert.ToString (total); ' –

2

: 당신이 당신의 텍스트 상자의 입력 잘못 무엇인지 찾을 수 있도록해야한다

decimal dec1; 
if (!Decimal.TryParse(SSubTotalTextBox.Text, dec1) 
{ 
    MessageBox.Show("Error trying to convert to a decimal: " + SSubTotalTextBox.Text); 
} 

.