簡體   English   中英

輸入的字符串格式不正確

[英]input string is not in a correct format

我想計算百分比。 但是編譯器給出了一個錯誤,即輸入字符串的格式不正確。 有人可以詳細說明我在這里所缺少的嗎?

private double per()
{
  double a = Convert.ToDouble(tbEnglish.Text+tbUrdu.Text+tbPhysics.Text+tbChemistry.Text+tbMaths.Text);
  double d = 500;
  double lblResult = (a / d)*100;
  return lblResult;
 }

您正在串聯字符串,然后嘗試將一個結果轉換為雙精度。 因此,對於75.6、92.1、56.3 78.2和72.3的結果,您最終將嘗試解析“ 75.692.156.378.272.3”。

解析每個值,然后求和。

但是,我強烈建議您對此使用decimal而不是double 您還應該考慮使用TryParse代替Parse以便可以優雅地處理用戶輸入錯誤。 這是堅持使用Parse的解決方案:

public decimal AveragePercentage()
{
    decimal sum = decimal.Parse(tbEnglish.Text) +
                  decimal.Parse(tbUrdu.Text) +
                  decimal.Parse(tbPhysics.Text) +
                  decimal.Parse(tbChemistry.Text) +
                  decimal.Parse(tbMaths.Text);
    return sum / 5m;
}

出於興趣,為什么要在原始代碼中除以500,然后再乘以100? 為什么不除以5(我注意到發生了什么,就像我現在所做的那樣)?

附帶說明,區分編譯時錯誤和執行時錯誤非常重要。 不是編譯器說輸入字符串的格式不正確-在執行時是Convert.ToDouble方法。 在這種情況下,這是相對明顯的,但是在其他情況下,當它實際上在執行時失敗時,我們可能一直試圖尋找一個編譯時問題。

我的Linux機器上沒有Visual Studio,但我認為最好使用這樣的代碼。

private double per()
{
   double a = Convert.ToDouble(tbEnglish.Text);
   a += Convert.ToDouble(tbPhysics.Text);
   a += Convert.ToDouble(tbChemistry.Text);
   a += Convert.ToDouble(tbMaths.Text);
   double d = 500;
   double lblResult = (a / d)*100;
   return lblResult;
}

在您的示例中,您最終構建了一個字符串 ,該字符串應類似於:“ 75.692.156.372.3”,該字符串無法解析為雙精度型。

您需要在使用+運算符之前將所有TextBox.Text值轉換為Decimals。

暫無
暫無

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

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