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. Does your website have a contact page? I’m having a tough time locating it but, I’d like to send you an e-mail. I’ve got some recommendations for your blog you might be interested in hearing. Either way, great site and I look forward to seeing it grow over time.