[Python] Un aiuto per neofita alle prime armi
Daniele Varrazzo
piro a develer.com
Ven 20 Gen 2012 13:43:37 CET
On Fri, 20 Jan 2012 13:13:46 +0100, Giovanni Porcari wrote:
> Il giorno 20/gen/2012, alle ore 12:39, Daniele Varrazzo ha scritto:
>
>> Non mi sembra proprio: Gianni sta facendo una divisione, non una
>> somma di milioni in cui deve mantenere i decimali.
>
>
> Perchè parli di somma di milioni ? Non mi è chiaro...
>
>
> Credevo che il problema fosse :
>
>
>>>> y=0.1
>>>> y*3
> 0.30000000000000004
>
>>>> x=Decimal('0.1')
>>>> x*3
> Decimal('0.3')
>
>
> E in effetti se al fisico o all'ingegnere la cosa va benone,
> il contabile preferisce un maggior 'controllo' ;)
Certo. Ma l'OP non ha richiesto un problema di contabilità: solo una
divisione.
In [1]: import ystockquote
In [3]: prezzo = ystockquote.get_price("ftsemib.mi")
In [4]: change = ystockquote.get_change("ftsemib.mi")
In [5]: prezzo
Out[5]: '15586.960'
In [6]: change
Out[6]: '-61.610'
In [7]: float(prezzo) / float(change)
Out[7]: -252.99399448141534
In [9]: from decimal import Decimal
In [10]: Decimal(prezzo) / Decimal(change)
Out[10]: Decimal('-252.9939944814153546502191203')
Che ci ha guadagnato, in [10], rispetto a [7]?
Invece ecco cosa ci ha perso:
In [11]: prezzo = float(ystockquote.get_price("ftsemib.mi"))
In [12]: change = float(ystockquote.get_change("ftsemib.mi"))
In [13]: print "%0.2f" % (100.0*change/(prezzo - change))
-0.41
In [14]: prezzo = Decimal(ystockquote.get_price("ftsemib.mi"))
In [15]: change = Decimal(ystockquote.get_change("ftsemib.mi"))
In [16]: print "%0.2f" % (100.0*change/(prezzo - change))
---------------------------------------------------------------------------
TypeError Traceback (most recent
call last)
/home/piro/src/<ipython console> in <module>()
TypeError: unsupported operand type(s) for *: 'float' and 'Decimal'
Se proprio uno vuole precisione assouluta, tuttalpiù ci vogliono i
razionali. I decimali sono il tipo di dati adatto a molti problemi... ma
non a questo.
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python