반응형
float 값이 범위 (0.50,150.00) 내에 있고 소수 2 자리가 있는지 확인하는 방법은 무엇입니까?
예를 들어 15.22366은 false 여야합니다 (십진수가 너무 많음). 그러나 15.22는 사실이어야합니다.
나는 다음과 같은 것을 시도했다.
data= input()
if data in range(0.50,150.00):
return True
해결 방법
당신이 찾고있는 건가요?
def check(value):
if 0.50 <= value <= 150 and round(value,2)==value:
return True
return False
귀하의 의견을 감안할 때 :
15.22366을 입력하면 true를 반환합니다. 그것이 내가 범위를 지정한 이유입니다. 15.22를 받아 들여야합니다.
간단히 말해서 부동 소수점 값은 정확하지 않습니다 . 많은 값이 정확한 표현이 아닙니다. 예를 들어 1.40
이라고 말하세요. "그대로"표시 될 수 있습니다.
>>> f = 1.40
>>> print f
1.4
>>> from decimal import Decimal
>>> Decimal(f)
Decimal('1.399999999999999911182158029987476766109466552734375')
소수점 2 자리 만 갖는 규칙에 따르면 f
가 유효한 값을 참조해야합니까?
이 문제를 해결하는 가장 쉬운 방법은 위 코드에서 제안한대로 round (..., 2)
를 사용하는 것입니다. 그러나 이것은 휴리스틱 방식 일 뿐이며 "대부분 잘못된"값만 거부 할 수 있습니다. 여기 내 요점을 참조하십시오.
>>> for v in [ 1.40,
... 1.405,
... 1.399999999999999911182158029987476766109466552734375,
... 1.39999999999999991118,
... 1.3999999999999991118]:
... print check(v), v
...
True 1.4
False 1.405
True 1.4
True 1.4
False 1.4
처음에는 마지막 몇 가지 결과가 어떻게 놀랍게 보일 수 있는지 확인하십시오. 위의 설명이 이것에 대해 약간의 빛을 비추 길 바랍니다.
참조 페이지 https://stackoverflow.com/questions/25466104
반응형
'파이썬' 카테고리의 다른 글
파이썬 SQLAlchemy에는 Django의 get_or_create와 동등한 기능이 있습니까? (0) | 2020.12.10 |
---|---|
파이썬 목록을 피클하는 방법? (0) | 2020.12.10 |
파이썬 Flask 또는 WSGI에서 원시 HTTP 요청 인쇄 (0) | 2020.12.10 |
파이썬 입력 인수의 형식 지정 argparse python (0) | 2020.12.10 |
파이썬 판다에 대한 반복 값 업데이트 (0) | 2020.12.10 |
댓글