Ho trovato utili questi articoli: - http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - http://www.lahey.com/float.htm - https://docs.python.org/2/tutorial/floatingpoint.html - http://www.lightbird.net/py-by-example/decimal-module.html
Nei casi in cui ci si scontra con questi problemi a volte è il caso di usare Decimal invece di float Marco Il giorno 14 aprile 2015 09:43, Daniele Varrazzo <p...@develer.com> ha scritto: > On 2015-04-14 00:26, Carpediem wrote: > >> Ho un problema su cui sicuramente qualcuno di voi saprà fornirmi una >> risposta. >> Per quel che mi riguarda, ho perso tre giorni prima di scoprire un >> comportamento sul modo di contare di python che mi porta a risultati >> fuorvianti. Ecco il punto: >> sb = 3287628061 >> mb = sb / 60 # con la calcolatrice ottengo 54793801.01666667 >> m1 = int(mb) # ottengo 54793801 >> s = int ((mb-m1)*60 # Con la calcolatrice ottengo 1 ma python >> restituisce alla variabile s il valore di 0,9999999403953552 e quindi >> 0 >> >> A questo punto, quindi, se chiedo di stampare s invece che ritrovarmi >> il valore 1 ottengo 0 >> utilizzando una comune calcolatrice, o quella fornita dallo stesso >> windows, ciò che ottengo effettuando 3287628061/60 è 54793801,01666667 >> Se invece chiedo a Python di stamparmi il risultato, dopo la virgola >> ottengo 01 e una serie di 6 senza che compaia il 7 finale. >> Tale differenza, quando chiedo di determinare il valore intero di s, >> comporta il mancato raggiungimento del valore di unità (che invece >> dovrei ottenere) producendo tutta una serie di conseguenze errate a >> catena sui risultati delle operazioni successive. >> 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? >> > > Ci sono corsi universitari interi sul comportamento dei numeri in virgola > mobile. In breve: non sono precisi. In meno breve, una rapida googlata ti > porta diversi esempi > > https://www.google.co.uk/webhp?#q=floating+point+number+problems > > Questo sembra divertente, poi me lo guardo: http://floating-point-gui.de/ > > 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. >> > > Usa round() invece di int() per convertire il numero all'intero più vicino. > > -- Daniele > > _______________________________________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python >
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python