Bildirimi Sonuç olarak, Decimal
değil. round
değeri bir float'a zorlamak ve sonra bir floatın yuvarlanması kurallarına göre yuvarlamaktır.
round()
numaralı telefonu aradığınızda isteğe bağlı ndigits
parametresini kullanırsanız, Ondalık bir sonucu alırsınız ve bu durumda beklediğiniz şekilde işlenecektir. o round(someDecimal)
bir int döndüren ancak round(someDecimal, ndigits)
bir ondalık döndürür, ancak Python 3.3 olur ve daha sonra neler olacağı kuvvetle muhtemel belgelenmiştir nerede bulamadım
Python 3.4.1 (default, Sep 24 2015, 20:41:10)
[GCC 4.9.2 20150212 (Red Hat 4.9.2-6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import decimal
>>> context = decimal.getcontext()
>>> context.rounding = decimal.ROUND_HALF_UP
>>> round(decimal.Decimal('2.5'), 0)
Decimal('3')
. Python 2.7'de, round()
'u aradığınızda her zaman bir geri kalanı alırsınız ancak Python 3.3, Decimal
'un Python yerleşikleriyle entegrasyonunu geliştirmiştir.
olarak Decimal.__round__()
için, bir yorum round()
delegelerini kaydetti ve bu gerçekten aynı davranışı gösterir:
>>> Decimal('2.5').__round__()
2
>>> Decimal('2.5').__round__(0)
Decimal('3')
Ben Fraction
belgeleri diyor unutmayın:
__round__()
__round__(ndigits)
The first version returns the nearest int to self, rounding half to even.
The second version rounds self to the nearest multiple of Fraction(1, 10**ndigits)
(logically, if ndigits is negative), again rounding half toward even.
This method can also be accessed through the round() function.
Böylece davranış tutarlıdır hiçbir argüman olmadan, sonucun türünü değiştirir ve yarısına bile yuvarlar, ancak Decimal
'un __round__
yönteminin davranışını belgelemediği görülür. .
Açıklamada Barry Hurley'in yorumlarda belirtildiği gibi düzenleyin, round()
, isteğe bağlı argümanlar ve isteğe bağlı argüman verilirse "kayan nokta değeri" olmadan çağrılırsa int
döndürüyor. Duncan'ın cevap @ üzerinde Genişleyen https://docs.python.org/3/library/functions.html#round
Teşekkürler @Duncan için açıklama, bu şeyleri anlamak için her zaman iyidir. Ndigits belirtip belirtmediğinize bağlı olarak farklı bir _type_ dosyasının döndürülmesi çok garip görünüyor. –
Eklenti olarak, python 3 docs 'number .__ round __ (ndigits) 'delege ettiğini ve' decimal 'modülünün kendi' __round__' yöntemi olan –
@ Dunca'ya sahip olduğunu belirtir; float olsa: "Eğer ndigits atlanırsa veya None ise, girdiye en yakın tam sayıyı döndürür." https://docs.python.org/3/library/functions.html#round –