2012-01-08 19 views
5

Estoy trabajando en un programa que almacena números como flotadores que eventualmente escribo en un archivo como moneda. Actualmente estoy usando la función de redondeo() para redondearlo a 2 decimales, pero el área de negocios me gustaría redondear al siguiente centavo sin importar el tercer decimal. Por ejemplo:

x = 39.142 

En este caso, estoy tratando de obtener x para redondear a 39.15. Obviamente cuando lo haga la función de ronda consigo 39,14 ...

>>> round(x, 2) 
    39.14 

¿Hay una manera que siempre se puede redondear hasta el siguiente centavo? Debo mencionar que los números con los que estoy tratando se imprimen en el archivo como moneda.

+4

Si es moneda, no trabaje con flotadores. Solo está buscando problemas. Se puede hacer, por supuesto, pero es más problemático de lo que vale. – harold

+2

@LanceCollins: la respuesta que ha seleccionado es totalmente incorrecta. Ver mis comentarios –

Respuesta

14

Utilizando el decimal module:

import decimal 
D = decimal.Decimal 
cent = D('0.01') 

x = D('39.142') 
print(x.quantize(cent,rounding=decimal.ROUND_UP)) 
# 39.15 

decimales tienen muchas opciones para el redondeo. Las opciones y sus significados se pueden encontrar en here.

+0

+1 Esta debería ser la respuesta aceptada. Tim debe ser eliminado. –

+0

Tim - Acepté las respuestas de unutbu. –

1

si desea escribirlo en centavos, puede usar int (x * 100 + .5) para obtener centavos enteros de dólares flotantes.