가능한 중복 :
파이썬에서
Python float - str - float weirdness파이썬에서 2/5.0을 나눌 때 오류가있는 이유는 무엇입니까?
, 2/5.0
또는 2/float(5)
반환 0.40000000000000002
이유는 마지막에 그 오류를 얻는 방법은 내가 올바른 값을 얻을 수 있습니다 추가 계산에 사용 하시겠습니까?
가능한 중복 :
파이썬에서
Python float - str - float weirdness파이썬에서 2/5.0을 나눌 때 오류가있는 이유는 무엇입니까?
, 2/5.0
또는 2/float(5)
반환 0.40000000000000002
이유는 마지막에 그 오류를 얻는 방법은 내가 올바른 값을 얻을 수 있습니다 추가 계산에 사용 하시겠습니까?
환영합니다 IEEE754, enjoy your stay.
대신 decimal
을 사용하십시오.
설명은 this question을 참조하십시오. 올바른 방법은 반올림 오류가있는
부동 소수점 연산이 정확하지 않기 때문에. 추가 계산에이 값을 사용하고 작업이 끝나면 결과를 반올림해야합니다. 정확히 필요하면 다른 데이터 형식을 사용하십시오.
위의 Ignacio는 정답입니다.
이진 컴퓨터에 부동 소수점 숫자를 효율적으로 저장하기위한 IEEE 표준이 있습니다. 숫자가 저장되는 방식과 정확히 모든 컴퓨터에서 이러한 규칙을 따르는 방법에 대한 자세한 설명은 무시 무시한 내용입니다.
그들은 또한 잘못되었습니다. 2 진수는 대부분의 일반 숫자를 처리 할 수 없으며 2의 거듭 제곱을 처리 할 수 있습니다. 바닥 비트를 반올림하거나 다른 트릭으로 재 계산해야하는 까다로운 작업을하는 대신, 표준은 효율성을 선택합니다.
그런 식으로하면 시스템에서 약간 빠른 속도로 저주 할 수 있습니다. 이러한 문제를 해결하기 위해 Python을 어떤 식 으로든 변경하는 것에 대한 토론이 때때로 있습니다. 그러나 응답은 효율성면에서 큰 손실없이 사소한 것이 아닙니다.
이 주위 방법 :
하나의 옵션은 표준 라이브러리의 '진수'패키지로 파고있다. 예제를 고수하고 긴 페이지를 무시하면 원하는 것을 얻을 수 있습니다. 효율에 대한 어떠한 배팅도하지 않습니다.
두 번째는 하나의 출력 기능에서 수동 반올림 및 문자열 자르기입니다. 당신이 그 비트들을 인쇄하지 않는다면 그 숫자가 조금이라도 부족하다면 누가 신경 쓰나요?
'decimal '을 사용하면 **이 문제를 해결하지 못합니다 **. 십진수는 이진 부동 소수점 수보다 모든 이성을 표현할 수 없습니다. 예를 2/5에서 2/3로 바꾸십시오. –
Python 3.1에는 이러한 종류의 모양을 피하는 새로운 부동 소수점 서식 지정 기능이 있습니다. 자세한 내용은 What's new in Python 3.1을 참조하십시오 ("부동 소수점"으로 검색).
귀하의 숙력 : * 모든 컴퓨터 과학자가 부동 소수점 연산에 대해 알아야 할 사항 * http://docs.sun.com/source/806-3568/ncg_goldberg.html –
python tutorial에서 설명하는 내용 : http : // docs. python.org/tutorial/floatingpoint.html – nosklo
여러 개의 질문이 중복되었습니다. 검색하십시오. 이들 모두 : http://stackoverflow.com/search?q=[python]+floating+point. 특히이 : http : // stackoverflow.com/questions/1778368/python-float-str-float-weirdness –