2011-01-30 152 views
8

Quiero convertir en un medio pitón de manera que cuando digo print x (donde x = 1/2) se devuelve 0,5Python Convierte fracción a decimal

Busco la forma más básica de hacer esto , sin usar ninguna función dividida, bucles o mapas

He intentado flotar (1/2) pero obtengo 0 ... ¿alguien me puede explicar por qué y cómo solucionarlo?

¿Es posible hacer esto sin modificar la variable x = 1/2?

Gracias

+0

¿Puede explicar más lo que quiere decir con 'sin modificar la variable x = 1/2'? – eat

+0

¿Es esta una pregunta capciosa como parte de una clase que estás tomando? Si es así, márcalo como [deberes]. –

Respuesta

23

en python 3.x cualquier división devuelve un flotador;

>>> 1/2 
0.5 

para lograr que en Python 2.x, usted tiene que forzar la conversión de flotación:

>>> 1.0/2 
0.5 

o para importar la división del "futuro"

>>> from __future__ import division 
>>> 1/2 
0.5 

Un extra: no hay un tipo de fracción incorporada, pero existe en la biblioteca oficial:

>>> from fractions import Fraction 
>>> a = Fraction(1, 2) #or Fraction('1/2') 
>>> a 
Fraction(1, 2) 
>>> print a 
1/2 
>>> float(a) 
0.5 

y así sucesivamente ...

+4

corrección - en Python3, '/' flota la división y '//' no la división int; donde en Python2, dependiendo de los argumentos, '/' puede ser división flotante (si al menos una arg es flotante) o int (si todas las args son int) –

7

Probablemente se esté usando Python 2. Se puede "fijar" la división mediante el uso de:

from __future__ import division 

al comienzo de la secuencia de comandos (antes de cualquier otra importaciones). De forma predeterminada en Python 2, el operador / realiza una división de enteros al usar operandos enteros, que descarta partes fraccionales del resultado.

Esto se ha cambiado en Python 3, por lo que / es siempre la división en coma flotante. El nuevo operador // realiza la división de enteros.

+0

No puedo poner esto dentro de una función ... me da un error diciendo que la línea debe colocarse al principio del archivo ... – Kartik

+0

Correcto.Otra forma de forzar la división de coma flotante es usar al menos un operando de coma flotante. Por lo tanto, intente con '1/2.0', o' 1/float (2) '. –

+0

Lo sé de esa manera pero el problema es que no puedo modificar la entrada ... no puedo cambiar x = '1/2' ... todo lo que puedo hacer es aplicarle diferentes funciones para obtener 0.5 ... ¿Es posible que ¿camino? – Kartik

6

Alternativamente, puede forzar la división de coma flotante especificando un decimal o multiplicando por 1.0. Por ejemplo (desde el interior del intérprete de Python):

>>> print 1/2 
0 
>>> print 1./2 
0.5 
>>> x = 1/2 
>>> print x 
0 
>>> x = 1./2 
>>> print x 
0.5 
>>> x = 1.0 * 1/2 
>>> print x 
0.5 

EDIT: Parece que he sido golpeado por la mano en el tiempo que le llevó a escribir mi respuesta :)

3

No hay cantidad 1/2 en cualquier lugar. Python no representa números racionales con un tipo incorporado, solo enteros y números de coma flotante. 1 está dividido por 2 - siguiendo las reglas de división de enteros - resultando en 0. float(0) es 0.

3

Si la entrada es una cadena, entonces usted podría utilizar Fracción directamente en la entrada:

from fractions import Fraction 

x='1/2' 
x=Fraction(x) #change the type of x from string to Fraction 
x=float(x)  #change the type of x from Fraction to float 
print x