본문 바로가기
파이썬

파이썬 부동 소수점 값이 특정 범위 내에 있고 주어진 소수 자릿수를 가지고 있는지 확인하는 방법은 무엇입니까?

by º기록 2020. 12. 10.
반응형

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

 

 

반응형

댓글