2013-04-05 2 views
4

가장 가까운 십진수로 반올림하면서 파이썬 Decimal 인스턴스를 특정 자릿수로 반올림하려면 어떻게합니까?파이썬 돌리기 방법 십진수 인스턴스

docs에 설명 된 .quantize(Decimal('.01')) 방법을 사용해 보았습니다. previous answers에서 제안했지만 다른 ROUND_ 옵션을 시도해도 올바르게 반올림되지는 않습니다. 또한 getcontext(). prec를 설정해 보았습니다. 그러나 이는 단지 소수만이 아니라 전체 숫자의 총 자릿수를 제어하는 ​​것으로 보입니다.

난 당신이 당신이 원하는 것을 얻을 quantizedecimal.ROUND_HALF_UP 옵션을 사용할 필요가 있다고 생각

assert Decimal('3.605').round(2) == Decimal('3.61') 
assert Decimal('29342398479823.605').round(2) == Decimal('29342398479823.61') 
assert Decimal('3.604').round(2) == Decimal('3.60') 
assert Decimal('3.606').round(2) == Decimal('3.61') 

답변

7

: 내가 좋아하는 뭔가를 시도하고있다.

>>> for x in ('3.605', '29342398479823.605', '3.604', '3.606'): 
    print x, repr(Decimal(x).quantize(Decimal('.01'), decimal.ROUND_HALF_UP)) 

3.605 Decimal('3.61') 
29342398479823.605 Decimal('29342398479823.61') 
3.604 Decimal('3.60') 
3.606 Decimal('3.61')