¿Cómo obtengo un valor decimal cuando uso el operador de división en Python?
-
02-07-2019 - |
Pregunta
Por ejemplo, el símbolo de división estándar '/' se redondea a cero:
>>> 4 / 100
0
Sin embargo, quiero que devuelva 0,04.¿Qué uso?
Solución
Hay tres opciones:
>>> 4 / float(100)
0.04
>>> 4 / 100.0
0.04
que es el mismo comportamiento que C, C++, Java, etc., o
>>> from __future__ import division
>>> 4 / 100
0.04
También puedes activar este comportamiento pasando el argumento -Qnew
al intérprete de Python:
$ python -Qnew
>>> 4 / 100
0.04
La segunda opción será la predeterminada en Python 3.0.Si desea tener la antigua división de enteros, debe usar la //
operador.
Editar:sección agregada sobre -Qnew
, gracias a ΤΖΩΤΖΙΟΥ!
Otros consejos
Otras respuestas sugieren cómo obtener un valor de punto flotante.Si bien esto será cercano a lo que desea, no será exacto:
>>> 0.4/100.
0.0040000000000000001
Si realmente quieres un decimal valor, haz esto:
>>> import decimal
>>> decimal.Decimal('4') / decimal.Decimal('100')
Decimal("0.04")
Eso le dará un objeto que sabe correctamente que 4/100 en base 10 es "0,04".Los números de coma flotante en realidad están en base 2, es decirbinario, no decimal.
Convierta uno o ambos términos en un número de punto flotante, así:
4.0/100.0
Alternativamente, active la característica que será predeterminada en Python 3.0, 'división verdadera', que hace lo que desea.En la parte superior de su módulo o script, haga:
from __future__ import division
Quizás quieras mirar Python decimal paquete, también.Esto proporcionará buenos resultados decimales.
>>> decimal.Decimal('4')/100
Decimal("0.04")
Debe decirle a Python que use valores de punto flotante, no números enteros.Puedes hacerlo simplemente usando un punto decimal en las entradas:
>>> 4/100.0
0.040000000000000001
Prueba 4.0/100
Una ruta sencilla 4/100.0
o
4.0 / 100
Aquí tenemos dos posibles casos que se detallan a continuación.
from __future__ import division
print(4/100)
print(4//100)
También puedes intentar agregar un ".0" al final del número.
4.0/100.0
No puedes obtener un valor decimal dividiendo un número entero entre otro, siempre obtendrás un número entero de esa manera (el resultado se trunca a un número entero).Necesita al menos un valor para ser un número decimal.
Agregue la siguiente función en su código con su devolución de llamada.
# 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
Esta función funciona sobre la base del "Algoritmo de división de Euclid".Esta función es muy útil si no desea importar ningún archivo de encabezado externo en su proyecto.
Síntesis:dividir([dividente], [divisor], [lugar decimal(opcional))
Código: divide(1, 7, 10)
O divide(1, 7)
Comente a continuación para cualquier consulta.
Importe la división de una biblioteca futura como esta:
from__future__ import division