나는 다음과 같은 기능을 가지고 있습니다 (나는 linq에별로 익숙하지 않습니다)
public static bool IsNumber(string s, char dec_sep)
{
return s.Length > 0 && s.All(c => Char.IsDigit(c));
}
숫자에 소수점 구분 기호가 포함되어 있으면 사실로 거짓이됩니다. 정의 된 소수 구분 기호가 숫자에 있는지 확인하고 싶습니다.이 목적을 위해이 함수를 수정할 수 있습니까? 아니면 다른 함수를 작성해야합니까?
더 명확하게
문자열에 72.5와 같은 소수 구분 기호가 있으면 false를 반환합니다 (내 정의 구분 기호는 "."). 문자열이 72 또는 725이면 이미 true를 반환합니다.이 함수는 소수 구분 기호를 사용해도 TRUE를 반환합니다.
자신의 "IsNumber"함수를 작성하지 않는 것이 좋습니다.
이 프레임 워크는 이미이 TryParse
값 유형에 내장 된 모든 - 나도 사용하는 것이 좋습니다 있도록 float.TryParse
, double.TryParse
또는 decimal.TryParse
크기와 당신이 기다리고있어 수 (23, 64 또는 128 비트)의 정밀도에 따라 달라집니다.
자신의 "IsNumber"함수를 작성하는 것은 특히 사용자 입력 (또는 그 문제로 인해 제어 할 수없는 입력)을 구문 분석하려는 경우 몇 가지 어려움이있을 수 있습니다. 왜냐하면 다른 많은 "간단한"것과 마찬가지로, 숫자는 단순 할뿐입니다.
첫째, 숫자는 천 단위 구분 기호를 가질 수 있습니다. 영어에서는 1,234.56이 유효한 숫자입니다.
둘째, 숫자의 문자열 표현은 문화권에 따라 다릅니다. 1,234.56은 소수 구분 기호가 쉼표이고 천 단위 구분 기호가 점인 일부 문화권 에서는 유효하지 않으므로 실제로 다음과 같이 작성합니다. 1.234,56
두 가지가 다릅니다. 같은 숫자를 쓰는 방법-천, 이백 삼십 사, 오십 육백 분의 일.
최악의 경우에도 태국어, 아랍어, 중국어 또는 히브리어와 같은 다른 숫자로 같은 숫자를 쓸 수 있습니다.이 모든 언어 (그리고 아마도 더 많은 언어)에는 숫자에 대한 고유 한 기호가 있습니다.이 숫자가 IsDigit
모두 포함 되는지는 모르겠습니다. (아마도 문화에 따라 다름).
모든 것을 말했듯이, 현재 함수는 NullReferenceException
문자열이 null이면 a를 throw합니다. 최소한해야 할 일은 ArgumentNullException
문자열이 null이면 false를 반환하거나 단순히 반환하는 것입니다.
또한 문자가 정확히 0인지 또는 문자열에 한 번 존재하는지 알고 싶은 유효한 사용 사례가있을 것입니다. 한 가지 방법은 IndexOf
에서 LastIndexOf
빼고이 빼기 의 결과가 0
. 이를 현재 방법과 결합하려면 All
문자가 숫자 또는 지정된 소수점 구분 기호가 될 수 있도록 메서드 의 조건을 변경해야합니다 .
정말로 자신 만의 방법을 작성해야한다면, 시작하는 방법은 다음과 같습니다.
public static bool IsNumber(string s, char dec_sep)
{
return !string.IsNullOrEmpty(s)
&& s.LastIndexOf(dec_sep) - s.IndexOf(dec_sep) == 0
&& s.All(c => Char.IsDigit(c) || c == dec_sep);
}
첫 번째 조건은 문자열이 null이거나 비어 있으면 false를 반환하고, 두 번째 조건은 문자열
에 두 번 dec_sep
이상 포함 된 경우에만 false를 반환
하고, 세 번째 조건은 문자열에 숫자가 아닌 문자가 포함 된 경우에만 false를 반환 dec_sep
합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다