代码之家  ›  专栏  ›  技术社区  ›  Aaron Fischer

在哪里可以找到ATOF的.NET实现?

  •  2
  • Aaron Fischer  · 技术社区  · 14 年前

    在.NET世界中,C语言的ATOF函数是否有实现?float.parse的行为不同。

    一些行为差异。

    • “50苹果”将返回50。
    • “50个苹果。”1“将返回50。
    • “apple”将返回0。
    1 回复  |  直到 14 年前
        1
  •  6
  •   Ben M    14 年前

    如果你想复制 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;
    }