round () 함수에 대한 문서 는 숫자를 전달하고 소수점 이하 자리를 반올림하도록 지정합니다. 따라서 다음 을 수행해야합니다.
n = 5.59
round(n, 1) # 5.6
그러나 실제로는 오래된 부동 소수점 기이함이 들어와 다음과 같은 결과를 얻습니다.
5.5999999999999996
UI를 위해 5.6
. 나는 인터넷을 샅샅이 뒤져서 이것이 파이썬 구현에 의존한다는 몇 가지 문서 를 발견했습니다 . 불행히도 이것은 내 Windows dev 컴퓨터와 내가 시도한 각 Linux 서버에서 발생합니다. 여기도 참조하십시오 .
내 라운드 라이브러리를 만드는 데 부족한데,이 문제를 해결할 방법이 있습니까?
답변
저장 방식을 도울 수는 없지만 최소한 서식이 올바르게 작동합니다.
'%.1f' % round(n, 1) # Gives you '5.6'
답변
반올림하지 않아도 서식이 올바르게 작동합니다.
"%.1f" % n
답변
Decimal 모듈을 사용하는 경우 ’round’기능을 사용하지 않고도 근사값을 계산할 수 있습니다. 특히 통화 응용 프로그램을 작성할 때 반올림에 사용했던 내용은 다음과 같습니다.
Decimal(str(16.2)).quantize(Decimal('.01'), rounding=ROUND_UP)
16.20 인 10 진수를 반환합니다.
답변
round(5.59, 1)
잘 작동합니다. 문제는 5.6이 이진 부동 소수점으로 정확하게 표현 될 수 없다는 것입니다.
>>> 5.6
5.5999999999999996
>>>
Vinko가 말했듯이 문자열 형식을 사용하여 표시를 위해 반올림 할 수 있습니다.
파이썬에는 필요한 경우 십진 산술을위한 모듈 이 있습니다.
답변
. str(round(n, 1))
대신 그렇게하면 ‘5.6’이 표시 됩니다 round(n, 1)
.
답변
데이터 유형을 정수로 전환 할 수 있습니다.
>>> n = 5.59
>>> int(n * 10) / 10.0
5.5
>>> int(n * 10 + 0.5)
56
그런 다음 로케일의 소수 구분 기호를 삽입하여 숫자를 표시하십시오.
그러나 Jimmy의 대답 이 더 좋습니다.
답변
부동 소수점 수학은 사소하지만 성가신 정밀도 부정확성에 취약합니다. 정수 또는 고정 소수점으로 작업 할 수 있으면 정밀도가 보장됩니다.