truncar redondear parte operaciones multiplicacion matematicas exponente entera decimales python floating-point integer division python-2.x

python - redondear - ¿Cómo puedo forzar la división para que sea punto flotante? ¿La división sigue redondeando a 0?



redondear en python (13)

Tengo dos valores enteros b , pero necesito su relación en punto flotante. Sé que a < b y quiero calcular a / b , así que si uso la división entera, siempre obtendré 0 con el resto de a .

¿Cómo puedo forzar que c sea ​​un número de punto flotante en Python en lo siguiente?

c = a / b


¿Cómo puedo forzar que la división sea punto flotante en Python?

Tengo dos valores enteros ayb, pero necesito su relación en punto flotante. Sé que a <b y quiero calcular a / b, así que si uso la división entera, siempre obtendré 0 con el resto de a.

¿Cómo puedo forzar que c sea un número de punto flotante en Python en lo siguiente?

c = a / b

Lo que realmente se pregunta aquí es:

"¿Cómo fuerzo la división verdadera de modo que a / b devuelva una fracción?"

Actualizar a Python 3

En Python 3, para obtener la verdadera división, simplemente debes hacer a / b .

>>> 1/2 0.5

La división de piso, el comportamiento clásico de división para enteros, ahora es a // b :

>>> 1//2 0 >>> 1//2.0 0.0

Sin embargo, puede quedar atrapado usando Python 2, o puede estar escribiendo código que debe funcionar tanto en 2 como en 3.

Si usa Python 2

En Python 2, no es tan simple. Algunas formas de tratar con la división clásica de Python 2 son mejores y más robustas que otras.

Recomendación para Python 2

Puede obtener el comportamiento de división de Python 3 en cualquier módulo dado con la siguiente importación en la parte superior:

from __future__ import division

que luego aplica la división de estilo Python 3 a todo el módulo. También funciona en una concha de pitón en cualquier punto dado. En Python 2:

>>> from __future__ import division >>> 1/2 0.5 >>> 1//2 0 >>> 1//2.0 0.0

Esta es realmente la mejor solución, ya que garantiza que el código de su módulo sea más compatible con Python 3.

Otras opciones para Python 2

Si no desea aplicar esto a todo el módulo, está limitado a algunas soluciones. El más popular es forzar a uno de los operandos a un flotador. Una solución robusta es a / (b * 1.0) . En una cáscara de Python fresca:

>>> 1/(2 * 1.0) 0.5

También robusto es truediv del operator operator.truediv(a, b) truediv operator.truediv(a, b) , pero esto es probablemente más lento porque es una llamada de función:

>>> from operator import truediv >>> truediv(1, 2) 0.5

No recomendado para Python 2

Comúnmente se ve a / float(b) . Esto elevará un TypeError si b es un número complejo. Dado que la división con números complejos está definida, tiene sentido para mí no fallar la división cuando se pasa un número complejo para el divisor.

>>> 1 / float(2) 0.5 >>> 1 / float(2j) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can''t convert complex to float

No tiene mucho sentido para mi propósito hacer que su código sea más frágil.

También puede ejecutar Python con el indicador -Qnew , pero esto tiene el inconveniente de ejecutar todos los módulos con el nuevo comportamiento de Python 3, y algunos de sus módulos pueden esperar una división clásica, por lo que no recomiendo esto excepto para las pruebas. Pero para demostrar:

$ python -Qnew -c ''print 1/2'' 0.5 $ python -Qnew -c ''print 1/2j'' -0.5j


Esto también funcionará

u = 1. / 5 imprime u

0.2

respondió el 24 de diciembre de 2013 a las 19:58 Gaurav Agarwal 6,7172279140

Gracias Gauraw, esto hace el truco y es una solución bastante buena. En caso de que tanto el numerador como el denominador sean variables, la "solución" podría estar multiplicando 1. por el cociente.

Ejemplo:

aa = 2 bb = 3 aa / bb = 0 1. * aa / bb = 0.6666666666666666

;-)

Max - italia


Agregue un punto ( . ) Para indicar números de punto flotante

>>> 4/3. 1.3333333333333333

o

>>> from __future__ import division >>> 4/3 1.3333333333333333


Al hacer cualquiera de los parámetros para la división en formato de punto flotante también se produce la salida en punto flotante.

Ejemplo:

>>> 4.0/3 1.3333333333333333

o,

>>> 4 / 3.0 1.3333333333333333

o,

>>> 4 / float(3) 1.3333333333333333

o,

>>> float(4) / 3 1.3333333333333333


En Python 3.x, la barra única ( / ) siempre significa división verdadera (no truncadora). (El operador // se usa para truncar la división). En Python 2.x (2.2 y superior), puede obtener este mismo comportamiento al poner un

from __future__ import division

en la parte superior de su módulo.


Esto también funcionará

>>> u=1./5 >>> print u

0.2


Puedes lanzar para flotar haciendo c = a / float(b) . Si el numerador o denominador es un flotante, el resultado también lo será.

Una advertencia: como han señalado los comentaristas, esto no funcionará si b podría ser algo más que un número entero o de coma flotante (o una cadena que representa uno). Si es posible que estés tratando con otros tipos (como números complejos) necesitarás verificarlos o usar un método diferente.


Si desea usar la división "verdadera" (punto flotante) de forma predeterminada, hay un indicador de línea de comando:

python -Q new foo.py

Hay algunos inconvenientes (de la PEP):

Se ha argumentado que una opción de línea de comando para cambiar el valor predeterminado es mala. Ciertamente, puede ser peligroso en las manos equivocadas: por ejemplo, sería imposible combinar un paquete de biblioteca de terceros que requiera -Que con otro que requiera -Qold.

Puede obtener más información sobre los valores de otras banderas que cambian / advierten sobre el comportamiento de la división en la página de manual de python.

Para detalles completos sobre los cambios de división, lea: PEP 238 - Cambiando el Operador de División


Si haces una división de dos enteros, Python te devolverá un entero, entonces debes hacer:

c = float(a)/b

o

c = a/float(b)

y luego obtener c como un tipo de float


>>> from __future__ import division >>> a = 4 >>> b = 6 >>> c = a / b >>> c 0.66666666666666663


c = a / (b * 1.0)


from operator import truediv c = truediv(a, b)


from operator import truediv c = truediv(a, b)

donde a es dividendo y b es el divisor. Esta función es útil cuando el cociente después de la división de dos enteros es un flotante.