Foros del Web » Programando para Internet » Python »

Expresiones evaluadas con python

Estas en el tema de Expresiones evaluadas con python en el foro de Python en Foros del Web. Tengo problemas con el round cuando le pongo el argumento para que solo muestre los decimales que yo quiero, no me hace ni caso por ...
  #1 (permalink)  
Antiguo 03/10/2009, 12:45
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 15 años, 2 meses
Puntos: 0
Expresiones evaluadas con python

Tengo problemas con el round cuando le pongo el argumento para que solo muestre los decimales que yo quiero, no me hace ni caso por ejemplo si pongo: abs(round(-34.2765,1)) el resultado debería ser 34.3, pero a mi me sale: 34.299999999999997 , otro ejemplo: round(2.4545,2) python me da: 2.4500000000000002 alguie me podría aclarar por que me pasa esto?

Otra cosa, por que x*=1+1 se evalua como x*2 en vez de x*1+1 no se supone que la multiplicacion debería hacerse primero? entonces no es lo mismo que escribir x=x*1+1 .

Mas cosas, por que Python evalúa 10**-3 como 0.001 , no debería ser -1000?

Si alguie tiene respuestas...........

Un saludo.
gracias
  #2 (permalink)  
Antiguo 03/10/2009, 14:24
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Expresiones evaluadas con python

Cita:
Mas cosas, por que Python evalúa 10**-3 como 0.001 , no debería ser -1000?
En esto python tiene toda la razón. -10**3 si seria -1000.

Ahora bien a la hora de imprimir flotantes python tiene un pequeño problema. Pero lo arreglas usando Decimal

Igual y prueba con:
Código python:
Ver original
  1. print "%.2f" % numero
  #3 (permalink)  
Antiguo 04/10/2009, 08:04
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Expresiones evaluadas con python

Gracias por tu respuesta , lo de 10**-3 me suponia que era un problema mas de matematicas.
Pero me sigue preocupando lo del round, no tanto por lo que imprima sino por que si necesito hacer operaciones con dos decimales.......va a hacer lo que le parezca, siguiendo un libro de python, supuestamente lo deberia hacer sin problemas.
Y que me dices de la expresión abreviada x*=1+1?
En fin......
Un saludo
  #4 (permalink)  
Antiguo 04/10/2009, 09:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Expresiones evaluadas con python

En cuanto a la expresión x*=1+1 esta completamente correcta como x*2

Ya que el operador *= evalúa primero toda la expresión y luego la multiplica por si mismo
Ejemplo:
x *= expr -> x = x*(expr)

Deberías leer un poco sobre el orden de precedencia de los operadores en python.
  #5 (permalink)  
Antiguo 04/10/2009, 09:29
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Expresiones evaluadas con python

Gracias por tu respuesta , el orden de las operaciones lo tengo claro, por eso es que no entendía por que no se hace la multiplicación primero y la suma después, supongo que tendré que imaginar ese parentesis que tu pones.
Un saludo
  #6 (permalink)  
Antiguo 05/10/2009, 10:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Expresiones evaluadas con python

En cuanto a los flotantes, no es un problema de Python sino de la implementación de aritmética de punto flotante estándar (http://es.wikipedia.org/wiki/IEEE_punto_flotante)

print abs(round(-34.2765,1))

devuelve "34.3", mientras que la salida que obtienes es producto de escribir

abs(round(-34.2765,1))

en el intérprete interactivo (la consola de python)

En cuanto a *=, es cierto que hay algunos lenguajes en los que la asignación es una operación que devuelve el resultado asignado, pero dudo que haya alguno en el que una asignación como la que escribes funcione como lo pretendes.


Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:37.