[Python] Richiesta chiarimento per calcoli con numeri decimali

Strap lab a strap.it
Mar 14 Apr 2015 10:00:33 CEST


Carpediem <i.carpediem <at> tiscali.it> writes:

> 
> [...]
> Qualcuno potrebbe avere la gentilezza di spiegarmi questo comportamento?
> e soprattutto, c'è un modo per chiedere un arrotondamento in eccesso per 
> la n cifra decimale?
> So che potrei ottenere un numero intero utilizzando per la divisione 
> l'operatore // ma sono particolarmente interessato a capire e risolvere 
> il problema contemplando l'utilizzo dei numeri in virgola mobile.
> Potete aiutarmi?
> Grazie.
> 

Ciao,

Il numero che ottieni con la calcolatrice è approssimato.
Infatti, per il calcolo con i decimali e le currency in genere è preferibile
usare decimal, non i float (e potrei andare off topic raccontandoti degli 
aneddoti :-) ).

>>> import decimal
>>> sb = 3287628061
>>> decimal.Decimal(sb)
>>> decimal.Decimal(sb) / decimal.Decimal(60)
Decimal('54793801.01666666666666666667')

Come puoi notare il valore che ottieni è diverso da quello della calcolatrice.

Avendo un decimal ora ottieni 1 se nelle tue conversioni converti tutto in int.

>>> (mb - m1) * 60
Decimal('1.00000000000000000020')
>>> int((mb - m1) * 60)
1

Nella documentazione trovi la spiegazione, ci sono pure degli esempi di 
arrotondamento con la funzione round
https://docs.python.org/2/tutorial/floatingpoint.html

Sani.
Strap


Maggiori informazioni sulla lista Python