2013-07-25 74 views
4

我是想解析字符串,如「10.0.20」成數以另一個字符串在C#.NET如何解析與多個小數點

相同的格式例如比較字符串我將比較這兩個數字可以看出這是比其他較小: 如果(10.0.30 < 10.0.30)....

我不知道我應該使用哪種方法解析此,爲十進制。在這種情況下,解析(字符串)不起作用。

謝謝你的時間。

編輯:@Romoku回答了我的問題我從來不知道有一個Version類,這正是我所需要的。那麼TIL。謝謝大家,如果不是很多,我會花幾個小時在表格上挖掘。

+0

'10.0.30'是無效的十進制數。你必須將它們作爲字符串進行比較(使用自定義比較器)或創建自己的類型(類),這將做到這一點。 – Zbigniew

+0

如果您只需比較版本號(如「1.0.0.123」和「3.1.1」),請嘗試版本類。 –

+0

請參閱[如何比較版本號](http://stackoverflow.com/questions/7568147/how-to-compare-version-numbers-by-not-using-split-function) – SwDevMan81

回答

7

您試圖解析的字符串看起來像一個verson,所以請嘗試使用Version類。

var prevVersion = Version.Parse("10.0.20"); 
var currentVersion = Version.Parse("10.0.30"); 

var result = prevVersion < currentVersion; 
Console.WriteLine(result); // true 
+0

謝謝,這回答了我的問題! – user2619395

1

版本看起來像最簡單的方法,但是,如果你需要無限「小數」然後嘗試下面的

private int multiDecCompare(string str1, string str2) 
    { 
     try 
     { 
      string[] split1 = str1.Split('.'); 
      string[] split2 = str2.Split('.'); 

      if (split1.Length != split2.Length) 
       return -99; 

      for (int i = 0; i < split1.Length; i++) 
      { 
       if (Int32.Parse(split1[i]) > Int32.Parse(split2[i])) 
        return 1; 

       if (Int32.Parse(split1[i]) < Int32.Parse(split2[i])) 
        return -1; 
      } 

      return 0; 
     } 
     catch 
     { 
      return -99; 
     } 
    } 

返回1,如果第一個字符串大於從左至右,-1,如果字符串2,如果相等則爲0,對於錯誤則爲-99。

那麼將返回1

string str1 = "11.30.42.29.66"; 
string str2 = "11.30.30.10.88"; 
+0

很棒!好的解決方案 – superachu