진수 예를 x
의 천장을하는 가장 직접적인 방법은 x.to_integral_exact(rounding=ROUND_CEILING)
을 사용하는 것입니다. 여기서 컨텍스트를 망칠 필요가 없습니다. 이 경우 적절한 경우 Inexact
및 Rounded
플래그가 설정됩니다. 플래그를 지정하지 않으려면 대신 x.to_integral_value(rounding=ROUND_CEILING)
을 사용하십시오. 예 :
소수점 대부분의 방법과는 달리
>>> from decimal import Decimal, ROUND_CEILING
>>> x = Decimal('-123.456')
>>> x.to_integral_exact(rounding=ROUND_CEILING)
Decimal('-123')
의 to_integral_exact
및 to_integral_value
방법은 현재 컨텍스트의 정밀도에 영향을받지 않습니다, 그래서 당신은 변화의 정밀도에 대해 걱정할 필요가 없습니다 :
>>> from decimal import getcontext
>>> getcontext().prec = 2
>>> x.to_integral_exact(rounding=ROUND_CEILING)
Decimal('-123')
그런데 파이썬 3.x에서 math.ceil
은 정확히 Decimal
인스턴스가 아닌 int
을 반환한다는 점을 제외하고는 원하는대로 정확하게 작동합니다. 그건 math.ceil
이 Python 3의 사용자 정의 유형에 대해 과부하가 걸리기 때문입니다. Python 2에서 math.ceil
은 Decimal
인스턴스를 float
으로 간단히 변환하여 프로세스에서 정보가 손실 될 수 있으므로 잘못된 결과가 발생할 수 있습니다.
저는 사실 파이썬을 처음 접했고, 어제는 사실 어제부터 시작했습니다. 내 두 번째 연습 프로그램에서이 문제를 우연히 만났습니다 (첫 번째 것은 의무적 인 "인쇄, 안녕하세요, 세계!"). 그래서 나는 이것에 대한 최선의 대답을 판단하기가 어렵다. Matthew Flaschen의 10 진수 컨텍스트 솔루션이 필자의 특별한 경우에 사용되었습니다. 하지만 다른 사람들에게 최상의 솔루션을 upvote하고 싶습니다. (특정 접근 방식이 왜 더 효과적인지 설명 할 수 있다면 나 같은 초보자에게 도움이 될 것입니다.) 나는 돌아와서 받아 들일 것입니다. – Gunjan