Domanda

Mi aspetto che 0.5 arrotondarsi fino a 1.Qualcuno può spiegare perché gira invece a 0?

>>> from decimal import *
>>> getcontext().prec = 0
>>> +Decimal(0.5)
Decimal('0')
.

È stato utile?

Soluzione

Hai chiesto a zero cifre significative di precisione.Se non si consente di memorizzare le cifre, tutti i numeri saranno zero.

Si noti che la precisione è il numero di cifre decimali significative , cioè non contando gli zeri principali.0.5 ha una singola cifra significativa, 1.5 ha due.Si noti inoltre che Decimal utilizza arrotondazione del banker .

Altri suggerimenti

Stai impostando la precisione su 0, prova a impostarlo su 1 o 2 invece.

Non sono sicuro di cosa sia il caso dell'uso, ma perché non solo fare:

round(0.5)
.

Convertirei solo in un int se vuoi un intero.

 int(Decimal(0.5))
.

Potresti anche assicurarti di avere la giusta impostazione di arrotondamento.

 getcontext().prec = 0
 getcontext().rounding = ROUND_HALF_UP
.

Nel tuo:

getcontext.prec()=0
.

Linea, stai chiedendo 0 luoghi decimali - tutti i decimali torneranno 0 in questo modo.Prova:

getcontext.prec()=1
.

o un altro numero per impostare la quantità di punti decimali.

Buona fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top