13.95a
로 반올림 하고 싶습니다 .
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
round
기능은 내가 예상대로 작동하지 않습니다.
답변
부동 소수점 숫자와 관련된 오래된 문제 가 발생 하여 모든 숫자를 정확하게 표현할 수는 없습니다. 명령 행은 메모리의 전체 부동 소수점 형식을 보여줍니다.
부동 소수점 표현의 경우 둥근 버전은 같은 숫자입니다. 컴퓨터는 이진이므로 부동 소수점 숫자를 정수로 저장 한 다음 2의 거듭 제곱으로 나눕니다. 따라서 13.95는 125650429603636838 / (2 ** 53)과 비슷한 방식으로 나타납니다.
배정도 숫자의 정밀도는 53 비트 (16 자리)이고 일반 부동 소수점의 정밀도는 24 비트 (8 자리)입니다. Python 의 부동 소수점 유형은 배정 밀도 를 사용하여 값을 저장합니다.
예를 들어
>>> 125650429603636838/(2**53)
13.949999999999999
>>> 234042163/(2**24)
13.949999988079071
>>> a = 13.946
>>> print(a)
13.946
>>> print("%.2f" % a)
13.95
>>> round(a,2)
13.949999999999999
>>> print("%.2f" % round(a, 2))
13.95
>>> print("{:.2f}".format(a))
13.95
>>> print("{:.2f}".format(round(a, 2)))
13.95
>>> print("{:.15f}".format(round(a, 2)))
13.949999999999999
예를 들어 통화 값을 표시하기 위해 소수점 이하 두 자리 만 뒤에 있으면 몇 가지 더 나은 선택이 있습니다.
- 정수를 사용하고 값을 달러가 아닌 센트로 저장 한 다음 100으로 나누어 달러로 변환하십시오.
- 또는 decimal 과 같은 고정 소수점 숫자를 사용하십시오 .
답변
새로운 형식 사양 인 String Format Specification Mini-Language가 있습니다 .
다음과 같은 작업을 수행 할 수 있습니다.
"{:.2f}".format(13.949999999999999)
참고 1 : 위는 문자열을 반환합니다. 플로트로 사용하려면 다음과 같이 간단히 랩핑하십시오 float(...)
.
float("{:.2f}".format(13.949999999999999))
참고 2 : 줄 바꿈 float()
해도 아무런 변화가 없습니다.
>>> x = 13.949999999999999999
>>> x
13.95
>>> g = float("{:.2f}".format(x))
>>> g
13.95
>>> x == g
True
>>> h = round(x, 2)
>>> h
13.95
>>> x == h
True
답변
답변
가장 간단한 방법은 format()
기능 을 사용하는 것입니다.
예를 들면 다음과 같습니다.
a = 13.949999999999999
format(a, '.2f')
13.95
이것은 소수점 이하 두 자리로 반올림 된 문자열로 부동 숫자를 생성합니다.
답변
사용하다
print"{:.2f}".format(a)
대신에
print"{0:.2f}".format(a)
후자는 여러 변수를 출력하려고 할 때 출력 오류가 발생할 수 있기 때문에 (주석 참조).
답변
대부분의 숫자는 실수로 정확하게 표현 될 수 없습니다. 수학 공식이나 알고리즘에 필요한 숫자이므로 숫자를 반올림하려면 반올림을 사용하십시오. 디스플레이를 특정 정밀도로 제한하려면 round를 사용하지 않고 해당 문자열로 형식화하십시오. (일부 대체 반올림 방법으로 표시하려는 경우 톤이 많은 경우 두 가지 방법을 혼합해야합니다.)
>>> "%.2f" % 3.14159
'3.14'
>>> "%.2f" % 13.9499999
'13.95'
마지막으로, 아마도 가장 중요하지만 정확한 수학을 원한다면 수레를 원하지 않습니다. 일반적인 예는 돈을 다루고 ‘센트’를 정수로 저장하는 것입니다.
답변
아래 코드를 사용해보십시오 :
>>> a = 0.99334
>>> a = int((a * 100) + 0.5) / 100.0 # Adding 0.5 rounds it up
>>> print a
0.99