int(round(x))
반올림하고 정수로 바꿉니다.
편집하다:
변수에 int (round (h))를 할당하지 않았습니다. int (round (h))를 호출하면 정수를 반환하지만 다른 작업은 수행하지 않습니다. 그 줄을 다음과 같이 변경해야합니다.
h = int(round(h))
h에 새 값을 할당하려면
편집 2 :
의견에서 @plowman이 말했듯이 Python round()
은 정상적으로 예상대로 작동하지 않으며 숫자가 변수로 저장되는 방식은 일반적으로 화면에 표시되는 방식이 아니기 때문입니다. 이 동작을 설명하는 많은 답변이 있습니다.
round ()가 올바르게 반올림되지 않는 것 같습니다
이 문제를 피하는 한 가지 방법은이 답변에 명시된 십진수를 사용하는 것입니다. https://stackoverflow.com/a/15398691/4345659
추가 라이브러리를 사용하지 않고이 답변이 제대로 작동하려면 사용자 정의 반올림 기능을 사용하는 것이 편리합니다. 많은 수정을 한 후 테스트 한 모든 저장 문제를 피할 수있는 다음 해결책을 생각해 냈습니다. repr()
(NOT str()
!)로 얻은 문자열 표현을 기반으로합니다 . 해키처럼 보이지만 모든 경우를 해결하는 유일한 방법이었습니다. Python2와 Python3 모두에서 작동합니다.
def proper_round(num, dec=0):
num = str(num)[:str(num).index('.')+dec+2]
if num[-1]>='5':
return float(num[:-2-(not dec)]+str(int(num[-2-(not dec)])+1))
return float(num[:-1])
테스트 :
>>> print(proper_round(1.0005,3))
1.001
>>> print(proper_round(2.0005,3))
2.001
>>> print(proper_round(3.0005,3))
3.001
>>> print(proper_round(4.0005,3))
4.001
>>> print(proper_round(5.0005,3))
5.001
>>> print(proper_round(1.005,2))
1.01
>>> print(proper_round(2.005,2))
2.01
>>> print(proper_round(3.005,2))
3.01
>>> print(proper_round(4.005,2))
4.01
>>> print(proper_round(5.005,2))
5.01
>>> print(proper_round(1.05,1))
1.1
>>> print(proper_round(2.05,1))
2.1
>>> print(proper_round(3.05,1))
3.1
>>> print(proper_round(4.05,1))
4.1
>>> print(proper_round(5.05,1))
5.1
>>> print(proper_round(1.5))
2.0
>>> print(proper_round(2.5))
3.0
>>> print(proper_round(3.5))
4.0
>>> print(proper_round(4.5))
5.0
>>> print(proper_round(5.5))
6.0
>>>
>>> print(proper_round(1.000499999999,3))
1.0
>>> print(proper_round(2.000499999999,3))
2.0
>>> print(proper_round(3.000499999999,3))
3.0
>>> print(proper_round(4.000499999999,3))
4.0
>>> print(proper_round(5.000499999999,3))
5.0
>>> print(proper_round(1.00499999999,2))
1.0
>>> print(proper_round(2.00499999999,2))
2.0
>>> print(proper_round(3.00499999999,2))
3.0
>>> print(proper_round(4.00499999999,2))
4.0
>>> print(proper_round(5.00499999999,2))
5.0
>>> print(proper_round(1.0499999999,1))
1.0
>>> print(proper_round(2.0499999999,1))
2.0
>>> print(proper_round(3.0499999999,1))
3.0
>>> print(proper_round(4.0499999999,1))
4.0
>>> print(proper_round(5.0499999999,1))
5.0
>>> print(proper_round(1.499999999))
1.0
>>> print(proper_round(2.499999999))
2.0
>>> print(proper_round(3.499999999))
3.0
>>> print(proper_round(4.499999999))
4.0
>>> print(proper_round(5.499999999))
5.0
마지막으로, 정답은 다음과 같습니다.
# Having proper_round defined as previously stated
h = int(proper_round(h))
편집 3 :
테스트 :
>>> proper_round(6.39764125, 2)
6.31 # should be 6.4
>>> proper_round(6.9764125, 1)
6.1 # should be 7
여기서 dec
10 점은 9가 될 수 있고- dec+1
> 5보다 큰 숫자 인 경우 9는 0이되고 1은- dec-1
번째 숫자 로 이동해야합니다 .
이를 고려하면 다음과 같은 이점이 있습니다.
def proper_round(num, dec=0):
num = str(num)[:str(num).index('.')+dec+2]
if num[-1]>='5':
a = num[:-2-(not dec)] # integer part
b = int(num[-2-(not dec)])+1 # decimal part
return float(a)+b**(-dec+1) if a and b == 10 else float(a+str(b))
return float(num[:-1])
전술 한 상황에서 b = 10
이전 버전 하듯 CONCATENATE a
와 b
의 연결에 초래되는 10
후단 0 사라지는 곳에. 이 버전은 b
을 기반으로 dec
올바른 캐리로 올바른 소수점 이하 자릿수로 변환 됩니다 .
int(x)