bir ondalık örneğinin x
tavan almaya en doğrudan yolu x.to_integral_exact(rounding=ROUND_CEILING)
kullanmaktır. Buradaki bağlamı karıştırmaya gerek yok. Bu, uygun olduğunda Inexact
ve Rounded
bayraklarını ayarlar; bayrakların dokunulmasını istemiyorsanız, bunun yerine x.to_integral_value(rounding=ROUND_CEILING)
kullanın. Örnek:
Ondalık yöntemlerin çoğu aksine
>>> from decimal import Decimal, ROUND_CEILING
>>> x = Decimal('-123.456')
>>> x.to_integral_exact(rounding=ROUND_CEILING)
Decimal('-123')
, to_integral_exact
ve to_integral_value
yöntemleri geçerli bağlamda hassasiyeti etkilenmez, bu nedenle değişen hassasiyet konusunda endişelenmenize gerek yoktur:
>>> from decimal import getcontext
>>> getcontext().prec = 2
>>> x.to_integral_exact(rounding=ROUND_CEILING)
Decimal('-123')
Bu arada, Python 3.x içinde, math.ceil
tam olarak istediğiniz gibi çalışır, ancak bir Decimal
örneği yerine bir int
döndürür. Bu, Python 3'teki özel türler için math.ceil
özel türlerinden yüklenemediği için çalışır. Python 2, math.ceil
ilk olarak,örneğini bir float
örneğine dönüştürür, potansiyel olarak işlemdeki bilgileri kaybeder, böylece yanlış sonuçlarla sonuçlanabilirsiniz.
Python'da yeni yaşıyorum, aslında dün başladım. İkinci uygulama programımda bu problemin üzerine tökezledim (birincisi zorunlu olan "baskı" Merhaba, Dünya! ";). Bu yüzden, buna en iyi cevabı yargılamak zor. Matthew Flaschen'ın decimal.Context çözümü benim özel durumumda çalıştı. Ama diğerlerinin en iyi çözümü desteklemesini istiyorum (eğer neden belirli bir yaklaşımın daha iyi çalıştığını açıklayabilirseniz benim gibi yeni başlayanlar için de yararlı olabilir) ve geri dönüp kabul edeceğim. – Gunjan