2017-11-04 3 views
2

문자열의 숫자와 숫자의 차이점은 무엇입니까 (https://www.tutorialspoint.com/python3/python_strings.htm)? 그들은 동일한 결과를 제공하는 것 : 파이썬에서 isnumeric과 isdecimal의 차이점

>>> "123456".isnumeric() 
True 
>>> "123456".isdecimal() 
True 
>>> "123.456".isnumeric() 
False 
>>> "123.456".isdecimal() 
False 
>>> "abcd".isnumeric() 
False 
>>> "abcd".isdecimal() 
False 

나는 "123.456"에 대해 true를 반환하는 isdecimal()를 기대하지만, 그렇지 않습니다.

+0

은 'isnumeric'과'isdecimal' 테스트 * 캐릭터의 유니 코드 속성 *. 10 진수는 테스트하지 않습니다. –

+0

밀접하게 관련 : [차이점은 unicode.isdigit()와 unicode.isnumeric()] (// stackoverflow.com/a/24384917) –

답변

2

두 가지 방법은 특정 유니 코드 문자 클래스를 테스트합니다. 문자열의 모든 문자가 지정된 문자 클래스 (특정 유니 코드 속성 보유)의 문자이면 테스트가 true입니다.

isdecimal() 문자열이 10 진수인지 테스트하지 않습니다. 참조 documentation :

Return true if all characters in the string are decimal characters and there is at least one character, false otherwise. Decimal characters are those that can be used to form numbers in base 10, e.g. U+0660, ARABIC-INDIC DIGIT ZERO. Formally a decimal character is a character in the Unicode General Category “Nd”.

. 기간 문자가 Nd 카테고리의 구성원이 아닌; 소수 문자가 아닙니다.

str.isdecimal() 문자는 str.isnumeric()의 하위 집합입니다. 이것은 모든 숫자를 테스트합니다. 다시, documentation에서 :

Return true if all characters in the string are numeric characters, and there is at least one character, false otherwise. Numeric characters include digit characters, and all characters that have the Unicode numeric value property, e.g. U+2155, VULGAR FRACTION ONE FIFTH. Formally, numeric characters are those with the property value Numeric_Type=Digit, Numeric_Type=Decimal or Numeric_Type=Numeric.

Nd 여기 Numeric_Type=Digit입니다.

당신은 문자열이 유효한 진수 인 경우 단지 float로 변환하려고 테스트하려면 :

def is_valid_decimal(s): 
    try: 
     float(s) 
    except ValueError: 
     return False 
    else: 
     return True 
+0

숫자가 유효한 십진수인지 테스트하고 한 단계에서 변수에 할당 할 수 있습니까? 또는'num = float (s)'을 별도로 실행해야합니까? – rnso

+0

숫자가 유효한 부동 소수점이 아닌 경우 할당 할 대상은 무엇입니까? 당신은'ValueError : num = 0.0 # except default ** '를 제외하고'try : num = float (s)'만을 사용할 수 있습니다. 나는 당신에게 검증 기능을 보여 주었지만, 만약 당신이 변환하고 할당하고 싶다면 그것을 사용하라. –

+0

여전히 "-1"인 .isnumeric()은 False입니까? – JaakL

0

진수 것보다 더 많은 숫자가 있습니다

>>> "٣".isdecimal() 
True 
>>> "¼".isdecimal() 
False 
>>> "¼".isnumeric() 
True 
관련 문제