簡體   English   中英

C#語句文本框總和

[英]C# Statement Textboxes Sum

我正在嘗試使用以下語句將3個文本框中的值相加,但是我似乎無法使其正常工作。 3個文本框的值顯示為十進制。 錯誤:mscorlib.dll中發生了'System.FormatException'類型的未處理異常。其他信息:輸入字符串的格式不正確。

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

問題中沒有足夠的細節,但是我的直覺告訴我這是問題所在:

您在文本框中具有40,5之類的內容,但是計算機當前的區域性將小數點分隔符設置為。(dot) 因此,在將40,5轉換為小數時會遇到異常,因為它無法識別.。

可能是相反的情況,您正在編寫40.5,但它預期會達到40.5。

編輯

我看到了有關Florian von Spiczak答案的評論,而且似乎$出現在文本框中。 如果是這樣,那顯然是一個問題。

嘗試用textBox.Text.Replace("$","")替換Convert.ToDecimal調用中的所有textBox.Text 那應該擺脫$並使它正確解析。

因此完整的代碼應為:

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;

另外,您應該將Convert.ToDecimal替換為decimal.Parsedecimal.TryParse ,並在文本decimal.TryParse實際寫入的內容上添加一些驗證邏輯。

代替Convert.ToDecimal嘗試:

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

這應該可以幫助您找出文本框輸入的問題。

最好的方法是使用decimal.TryParse()方法,然后可以進行一些驗證。 MSDN: Decimal.TryParse方法(字符串,十進制)

您是否在所有文本框中輸入了值? 轉換可能不喜歡空字符串。 您也可以嘗試使用decimal.Parse或decimal.TryParse而不是Convert。

編輯:我不認為文化是一個問題。 即使輸入了6,4,而文化要求是6.4,通常也會將解釋為千位分隔符,並且會得到64而不是6.4。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM