C#中處理字串和數字

來源:互聯網
上載者:User

在CSDN上有人問:C#中有沒有判斷一個string類型變數是否為數字類型的系統函數(如vb中的IsNumeric(s))?

答案肯定是沒有的。有人提議用int.Parse(string)的方法,然後通過捕獲異常來判斷返回的值。更好的方法是用Regex:
public int IsNumeric(string str)
{
      int i;
      if(str != null && Regex.IsMatch(str,@"^\d+$"))
                i = int.Parse(str);
      else
                i = -1;
       return i;
}

這應該是個好辦法。不過如果要提出更高的要求,例如不僅要判斷字串是否全為數字,還要在判斷後,要求將其進行轉換。那麼上述函數就有缺陷,因為在
上面的Regex中無法判斷‘-’符號。因此上面的函數只能轉換非負數。尤有甚者,要求轉換的不僅是整數,還包括浮點數,尤其是科學計數法的字串,例
如:string s = "-3.14159E+10"

這裡面的'E'、'.'、'+'等字元,都是比較特殊的,而且還要求它們出現的位置要符合浮點數或科學計數方法的規定。那麼就不能使用Regex
了,至少很麻煩(我是這樣認為的,或許有好的方法)。問題還是回到最初的解決方案,就是使用Parse()方法和捕獲異常。以下是實現此功能的方法:
public bool IsNumeric(string s, out double result)
{
   bool bReturn = true;
   try
   {
       result = double.Parse(s);
   }
   catch
   {
       result = 0;
       bReturn = false;
   }
   return bReturn;     
}
例如調用:

string s1="abc";
string s2="-3.14159E+10";
double d1,d2;
bool ty1 = IsNumeric(s1,out d1);
bool ty2 = IsNumeric(s2,out d2);
結果:
ty1=false;d1=0;
ty2=true;d2=31415900000

說明:因為涉及到浮點數,就不能使用-1來做為出現錯誤的傳回值,如前面的例子。也就是說本方法有兩個傳回值,一個是判斷轉換是否成功,為bool型;另一個是轉換成功後的浮點數值。我用out來解決該問題。

本方法仍然適合整型,只需對傳回值進行強制轉換即可。

posted on 2004-05-17 15:40 Bruce Zhang 閱讀(1985) 評論(4)  編輯 收藏 引用 網摘 所屬分類: C# Programming



評論


# re: C#中處理字串和數字

2005-09-21 01:49

演算法

不錯,謝謝  回複  更多評論
  

# re: C#中處理字串和數字

2006-07-10 16:45

nowaywolf

非常感謝!

前段時間在尋找這個問題的答案,沒有想到隱藏在這裡!  回複  更多評論
  

# re: C#中處理字串和數字

2006-11-17 12:00

小峰

用了異常捕獲,效率是個問題。

再說不用這麼麻煩,直接用TryParse方法就可以。

下面是我從協助文檔拷貝出來的:)

將數位字串表示形式轉換為它的等效雙精確度浮點數字。一個指示轉換是否成功的傳回值。

public static bool TryParse (

string s,

out double result

)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.