programing

NaN 또는 IsNumeric에 해당하는 C #은 무엇입니까?

nasanasas 2020. 8. 21. 07:51
반응형

NaN 또는 IsNumeric에 해당하는 C #은 무엇입니까?


입력 문자열에 숫자 값이 포함되어 있는지 (또는 반대로 숫자가 아님)를 테스트하는 가장 효율적인 방법은 무엇입니까? 나는 Double.Parse또는 정규식을 사용할 수 있다고 생각 하지만 (아래 참조) 자바 스크립트 NaN()또는 IsNumeric()(그 VB입니까, 기억할 수 없습니까?) 와 같이 이것을 수행하는 방법이 있는지 궁금합니다 .

public static bool IsNumeric(this string value)
{
    return Regex.IsMatch(value, "^\\d+$");
}

정규식 오버 헤드가 없습니다.

double myNum = 0;
String testVar = "Not A Number";

if (Double.TryParse(testVar, out myNum)) {
  // it is a number
} else {
  // it is not a number
}

덧붙여서 GUID를 제외한 모든 표준 데이터 유형은 TryParse를 지원합니다.

업데이트
secretwep는 "2345"값이 위의 테스트를 숫자로 통과 할 것임을 나타냅니다. 그러나 문자열 내의 모든 문자가 숫자인지 확인해야하는 경우 다른 접근 방식을 취해야합니다.

예 1 :

public Boolean IsNumber(String s) {
  Boolean value = true;
  foreach(Char c in s.ToCharArray()) {
    value = value && Char.IsDigit(c);
  }

  return value;
}

또는 조금 더 멋지고 싶다면

public Boolean IsNumber(String value) {
  return value.All(Char.IsDigit);
}

나는 이것과 같은 것을 선호한다. 그것은 당신이 무엇 NumberStyle을 테스트 할지 결정할 수있게 해준다 .

public static Boolean IsNumeric(String input, NumberStyles numberStyle) {
    Double temp;
    Boolean result = Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp);
    return result;
}

이전 정답뿐만 아니라 아마 "숫자가 아님"의 일반적인 사용에 비수 (NaN) 인 것을 지적 가치가 없는 숫자 값으로 평가 될 수없는 문자열에 해당. NaN은 일반적으로 결과가 정의되지 않은 "불가능"계산의 결과를 나타내는 데 사용되는 숫자 값으로 이해됩니다. 이 점에서 Javascript 사용이 약간 오해의 소지가 있다고 말하고 싶습니다. C #에서 NaN은 단일 및 이중 숫자 형식의 속성으로 정의되며 0으로 0으로 다이빙 한 결과를 명시 적으로 참조하는 데 사용됩니다. 다른 언어에서는이를 사용하여 다른 "불가능"값을 나타냅니다.


나는 이것이 확장과 람다 예제를 통해 여러 가지 방법으로 대답되었지만 가장 간단한 솔루션을 위해 두 가지를 조합 한 것으로 알고 있습니다.

public static bool IsNumeric(this String s)
{
    return s.All(Char.IsDigit);
}

또는 Visual Studio 2015 (C # 6.0 이상)를 사용하는 경우

public static bool IsNumeric(this String s) => s.All(Char.IsDigit);

한 줄에 멋진 C # 6. 물론 이것은 숫자 만 테스트하기 때문에 제한적입니다.

사용하려면 문자열을 가지고 다음과 같이 메소드를 호출하십시오.

bool IsaNumber = "123456".IsNumeric();

예, IsNumeric은 VB입니다. 일반적으로 사람들은 약간 어색하지만 TryParse () 메서드를 사용합니다. 제안했듯이 언제든지 직접 작성할 수 있습니다.

int i;
if (int.TryParse(string, out i))
{

}

나는 확장 방법을 좋아하지만 가능하면 예외를 던지는 것을 좋아하지 않습니다. 여기에서 2 개의 답변 중 가장 좋은 확장 방법을 선택했습니다.

    /// <summary>
    /// Extension method that works out if a string is numeric or not
    /// </summary>
    /// <param name="str">string that may be a number</param>
    /// <returns>true if numeric, false if not</returns>
    public static bool IsNumeric(this String str)
    {
        double myNum = 0;
        if (Double.TryParse(str, out myNum))
        {
            return true;
        }
        return false;
    }

C #에서 Visual Basic 함수를 계속 사용할 수 있습니다. 당신이해야 할 유일한 일은 아래 표시된 내 지침을 따르는 것입니다.

  1. Add the reference to the Visual Basic Library by right clicking on your project and selecting "Add Reference":

enter image description here

  1. Then import it in your class as shown below:

    using Microsoft.VisualBasic;

  2. Next use it wherever you want as shown below:

                if (!Information.IsNumeric(softwareVersion))
            {
                throw new DataException(string.Format("[{0}] is an invalid App Version!  Only numeric values are supported at this time.", softwareVersion));
            }
    

Hope, this helps and good luck!


VB has the IsNumeric function. You could reference Microsoft.VisualBasic.dll and use it.


Simple extension:

public static bool IsNumeric(this String str)
{
    try
    {
        Double.Parse(str.ToString());
        return true;
    }
    catch {
    }
    return false;
}

public static bool IsNumeric(string anyString)
{
    if (anyString == null)
    {
        anyString = "";
    }

    if (anyString.Length > 0)
    {
        double dummyOut = new double();
        System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US", true);
        return Double.TryParse(anyString, System.Globalization.NumberStyles.Any, cultureInfo.NumberFormat, out dummyOut);
    }
    else
    {
        return false;
    }
}

Maybe this is a C# 3 feature, but you could use double.NaN.


Actually, Double.NaN is supported in all .NET versions 2.0 and greater.


I was using Chris Lively's snippet (selected answer) encapsulated in a bool function like Gishu's suggestion for a year or two. I used it to make sure certain query strings were only numeric before proceeding with further processing. I started getting some errant querystrings that the marked answer was not handling, specifically, whenever a comma was passed after a number like "3645," (returned true). This is the resulting mod:

   static public bool IsNumeric(string s)
   {
      double myNum = 0;
      if (Double.TryParse(s, out myNum))
      {
         if (s.Contains(",")) return false;
         return true;
      }
      else
      {
         return false;
      }
   }

I have a slightly different version which returns the number. I would guess that in most cases after testing the string you would want to use the number.

public bool IsNumeric(string numericString, out Double numericValue)
{
    if (Double.TryParse(numericString, out numericValue))
        return true;
    else
        return false;
}

참고URL : https://stackoverflow.com/questions/437882/what-is-the-c-sharp-equivalent-of-nan-or-isnumeric

반응형