Rounding a number in Python but keeping ending zeros | 파이썬에서 0을 남겨두면서 실수 반올림 하기

Q.

엑셀 스프레드시트에서 데이터를 가져오고, 숫자를 반올림하고, 소수점을 지우는 스크립트를 만들고 있어요. 예를 들어, 2606.89579999999는 26069가 되는 것이지요. 한편, 반올림을 할 때 소수점 아래 두 자리까지 숫자를 만약 0이더라도 남겨두어야 해요. 따라서 2606.89579999999는 260690이 되는 것이지요.

변수 i가 엑셀의 하나의 셀에 있는 데이터라면, i=round(i, 2)를 했을 때 위의 예시는 소수점 아래 한 자리까지만 나와요.

Decimal 클래스를 이용하는 방법을 시도해봤지만, 잘 되지 않네요.

만약 반올림 된 숫자가 ‘0’으로 끝나지 않는다면 round(i, 2)는 잘 돼요. 하지만 *.x0 형태의 숫자가 나올 때면 마지막 0이 사라지고 데이터가 이상해지네요.

 

A.

0을 남겨두기 원한다면, 아마 이 질문은 String 출력에 대한 것이겠네요. 아래와 같이 할 수 있어요.

format 함수를 이용해서 조금 더 현대적으로 할 수도 있어요.

그리고 replace나 translate을 이용해서 소수점을 지울 수 있어요. (_는 파이썬 콘솔에서 직전 결과 값을 가리키고 있어요.)

여기서 잘 보시면 .2f가 이미 반올림을 하기 때문에, round 함수를 사용하지 않아요.

하지만 엑셀을 사용한다면, 반올림 함수를 잘 선택하거나 decimal을 사용해야 해요. float.round는 부동소수점 출력 때문에 이상한 결과가 나올 수 있으니까요.

decimal의 quantize를 사용할 수 있어요:

원래의 문제는 아래처럼 되지요:

그리고 Decimal을 사용하면 이상한 반올림 문제의 이유를 확인할 수 있어요:

 

#.

데이터가 float일 때에는 format을, str일 때에는 Decimal을 사용하다고 생각하면 되겠군요.

 

원문.

https://stackoverflow.com/questions/19986662/rounding-a-number-in-python-but-keeping-ending-zeros

195 Comments

  1. Wow! This could be one particular of the most beneficial blogs We’ve ever arrive across on this subject. Basically Wonderful. I’m also an expert in this topic therefore I can understand your effort.