2010-02-12 88 views
2

在.net世界中,c語言的atof函數是否有一個實現? float.Parse行爲不一樣。我在哪裏可以找到atof的.net實現?

一些行爲差異。

  • 「50蘋果」 將返回50
  • 「50蘋果1號」 將返回50
  • 「蘋果」 將返回0
+2

它可能如果你描述的次幫助行爲差異。 – 2010-02-12 17:17:47

+0

我相信Single.Parse應該做你想做的。你能舉一個沒有你想要的行爲的例子嗎? – RossFabricant 2010-02-12 17:21:17

回答

6

如果你的意思是你想複製atof的從寬處理(忽略前面的空白和尾隨非數字字符),你可以這樣做(假設C#3.0):

float myAtof(string myString) 
{ 
    Predicate<char> testChar = c => c == '.' || 
            c == '-' || 
            c == '+' || 
            char.IsDigit(c); 

    myString = new string(myString.Trim().TakeWhile(testChar).ToArray()); 

    if (myString.Length > 0) 
    { 
     float rvl; 

     // accounts for bogus strings of valid chars, e.g. ".-": 
     if (float.TryParse(myString, out rvl)) 
     { 
      return rvl; 
     } 
    } 

    return 0; 
} 
相關問題