Come posso ottenere un valore decimale quando utilizzo l'operatore di divisione in Python?
-
02-07-2019 - |
Domanda
Ad esempio, il simbolo di divisione standard '/' arrotonda a zero:
>>> 4 / 100
0
Tuttavia, voglio che restituisca 0.04. Cosa uso?
Soluzione
Esistono tre opzioni:
>>> 4 / float(100)
0.04
>>> 4 / 100.0
0.04
che ha lo stesso comportamento di C, C ++, Java ecc. o
>>> from __future__ import division
>>> 4 / 100
0.04
Puoi anche attivare questo comportamento passando l'argomento -Qnew
all'interprete Python:
$ python -Qnew
>>> 4 / 100
0.04
La seconda opzione sarà quella predefinita in Python 3.0. Se vuoi avere la vecchia divisione di interi, devi usare l'operatore //
.
Modifica : aggiunta una sezione su -Qnew
, grazie a & # 932; & # 918; & # 937; & # 932; & # 918; & # 921; & # 927; & # 933;!
Altri suggerimenti
Altre risposte suggeriscono come ottenere un valore in virgola mobile. Mentre questo sarà vicino a quello che vuoi, non sarà esatto:
>>> 0.4/100.
0.0040000000000000001
Se si desidera effettivamente un valore decimale , procedere come segue:
>>> import decimal
>>> decimal.Decimal('4') / decimal.Decimal('100')
Decimal("0.04")
Questo ti darà un oggetto che sa correttamente che 4/100 in base 10 è "0,04". I numeri in virgola mobile sono in realtà nella base 2, ovvero binari, non decimali.
Rendi uno o entrambi i termini un numero in virgola mobile, in questo modo:
4.0/100.0
In alternativa, attiva la funzione che sarà predefinita in Python 3.0, 'vera divisione', che fa quello che vuoi. Nella parte superiore del modulo o dello script, esegui:
from __future__ import division
Potresti voler dare un'occhiata anche al pacchetto decimal . Ciò fornirà buoni risultati decimali.
>>> decimal.Decimal('4')/100
Decimal("0.04")
Devi dire a Python di usare valori in virgola mobile, non numeri interi. Puoi farlo semplicemente usando tu stesso un punto decimale negli input:
>>> 4/100.0
0.040000000000000001
Prova 4.0 / 100
Un percorso semplice 4 / 100.0
o
4.0 / 100
Qui abbiamo due possibili casi indicati di seguito
from __future__ import division
print(4/100)
print(4//100)
Puoi anche provare ad aggiungere un " .0 " alla fine del numero.
4.0 / 100,0
Non puoi ottenere un valore decimale dividendo un intero con un altro, otterrai sempre un intero in quel modo (risultato troncato in intero). È necessario almeno un valore per essere un numero decimale.
Aggiungi la seguente funzione nel tuo codice con il suo callback.
# Starting of the function
def divide(number_one, number_two, decimal_place = 4):
quotient = number_one/number_two
remainder = number_one % number_two
if remainder != 0:
quotient_str = str(quotient)
for loop in range(0, decimal_place):
if loop == 0:
quotient_str += "."
surplus_quotient = (remainder * 10) / number_two
quotient_str += str(surplus_quotient)
remainder = (remainder * 10) % number_two
if remainder == 0:
break
return float(quotient_str)
else:
return quotient
#Ending of the function
# Calling back the above function
# Structure : divide(<divident>, <divisor>, <decimal place(optional)>)
divide(1, 7, 10) # Output : 0.1428571428
# OR
divide(1, 7) # Output : 0.1428
Questa funzione funziona sulla base di "algoritmo divisione Euclide". Questa funzione è molto utile se non vuoi importare file di intestazione esterni nel tuo progetto.
Sintassi: divide ([dividente], [divisore], [decimale (opzionale))
Codice: divide (1, 7, 10)
OPPURE divide (1, 7)
Commenta di seguito per qualsiasi domanda.
Importa divisione dalla libreria futura in questo modo:
from__future__ import division