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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a