Python - Redondeo

 
Vista:

Redondeo

Publicado por Amador (1 intervención) el 26/03/2011 19:59:49
Estamos intentado hacer que python redondeealgo tan simple como un valor * impuesto; pero algo falla.
Estamos en Canarias (5% IGIC) pero la consulta es aplicable a cualquier impuesto (IVA...).
Si pongo en el tipo de impuesto la formula round(price_unit*0.05,2) no redondea correctamente.
Es decir por ejemplo.

Teoría: price_unit = 85,50. Impuesto 5%--> 85,50*0,05 = 89,775. Redondeo a 2 decimales: 89,77. Pero Python me pone 89,78

Ya no se que más hacer. Alguna sugerencia??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Redondeo

Publicado por xve (1646 intervenciones) el 27/03/2011 18:43:13
Hola Amador, lo he mirado y remirado, y no he encontrado como hacerlo, siempre que intento recortar la cantidad de números decimales, me los redondea.

Lo único que se me ocurre, es que lo cortes tu manualmente... pero no se si te servirá:
val=89.775

"%d.%d" % (int(str(a).split(".")[0]), int(str(a).split(".")[1][0:2]))
'89.77'

Otra manera que se me ha ocurrido, es cortando por la posición del punto mas dos caracteres:
str(val)[0:str(val).find('.')+3]

Si encontraras la solución te agradecería me lo comentaras.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Decimal

Publicado por e.t (2 intervenciones) el 28/03/2011 05:06:32
#hola.
#Esto puede ser interesante:
#http://docs.python.org/library/decimal.html




from decimal import *

# analisis
valor_float = 85.50*1.05
valor_str = str(valor_float)
valor_dec = Decimal(valor_str)
valor = valor_dec1.quantize(Decimal('1.00'), rounding=ROUND_DOWN)
print valor
print float(valor)


# sintesis:
valor = Decimal(str(85.50*1.05)).quantize(Decimal('1.00'), rounding=ROUND_DOWN)
print valor
print float(valor)



#ROUND_CEILING (towards Infinity),
#ROUND_DOWN (towards zero),
#ROUND_FLOOR (towards -Infinity),
#ROUND_HALF_DOWN (to nearest with ties going towards zero),
#ROUND_HALF_EVEN (to nearest with ties going to nearest even integer),
#ROUND_HALF_UP (to nearest with ties going away from zero), or
#ROUND_UP (away from zero).
#ROUND_05UP (away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise towards zero)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar