Considerare:Perché questa divisione non funziona in Python?
>>> numerator = 29
>>> denom = 1009
>>> print str(float(numerator/denom))
0.0
Come faccio a farlo tornare un decimale?
Considerare:Perché questa divisione non funziona in Python?
>>> numerator = 29
>>> denom = 1009
>>> print str(float(numerator/denom))
0.0
Come faccio a farlo tornare un decimale?
Fino alla versione 3, l'operatore di divisione Python, /, si comportava come un operatore di divisione di C quando veniva presentato con due argomenti interi: restituisce un risultato intero che viene troncato quando ci sarà una parte frazionaria. Vedere: PEP 238
>>> n = 29
>>> d = 1009
>>> print str(float(n)/d)
0.0287413280476
In Python 2 (e forse anche prima) si potrebbe usare:
>>> from __future__ import division
>>> n/d
0.028741328047571853
-7 // 3 = -3 (resto è = 2) in Python e -7/3 = -2 (resto = -1) in C/C++ quindi non direi che questo comportamento è lo stesso in Python come in C/C++ – Artur
In Python 2.x, divisione funziona come lo fa in linguaggi C-like: se entrambi gli argomenti sono interi, il risultato viene troncato su un numero intero, quindi 29/1009 è 0. 0 come float è 0.0. Per risolvere il problema, il cast a un galleggiante prima di dividere:
print str(float(numerator)/denominator)
In Python 3.x, la divisione agisce in modo più naturale, così avrai il corretto risultato matematico (entro errore in virgola mobile).
print str(float(numerator)/float(denom))
È sufficiente trasmettere uno degli operandi a float(). In genere consiglio di lanciare il numeratore in quanto colloca il cast all'inizio dell'espressione in cui i lettori lo vedranno normalmente più facilmente. –
Sì, lo è, ma questo mi è sembrato più "giusto" solo perché era più trasparente nel cast. Ma sì, basta colarne uno solo. – inspectorG4dget
Nella tua valutazione stai trasmettendo il risultato, devi invece eseguire il cast degli operandi.
Un po 'a parte, ma 'float' non è uguale al tipo' Decimal' nella libreria standard Python. Quando dici "Voglio solo che restituisca un decimale", ciò che intendi veramente è "Voglio solo che restituisca una stringa che rappresenta un valore frazionario in notazione decimale", giusto? –