Publicidad

jueves, 24 de septiembre de 2015

Truncar y Redondear Flotantes en Python

Truncar y Redondear Flotantes en Python



    Eh creado esta entrada para mostrar estas 2 funciones muy útiles al momento de programar con Python, cual es la diferencia entre truncar y redondear, cuando truncamos un numero básicamente cortamos la cantidad a cierto numero de decimales sin importar si este podría redondearse hacia arriba o hacia abajo, lo que básicamente hacemos al redondear.

Para truncar un numero en python utilizamos la función format:

"{0:.4f}".format(12.05464897987)

# El resultado seria 12.0546
# En la expresión {0:.2f}, en el lado del # valor del diccionario indicamos
# el numero de decimales.
# Seguido del metodo format y dentro la 
# cantidad a truncar.

## Con separación de miles: ##

'{0:,.4f}'.format(o.initial_balance)

Para redondear un numero en pyhton utilizamos la función round:


round(12.05464897987,2)

# El resultado seria 12.0547
# Ejecutamos el metodo round y este recibe:
# - Cantidad
# - Numero de Decimales a redondear.

15 comentarios:

  1. puse en python round(12.05464897987,2) y da 12.05, no lo que ponen aquí(12.0547)

    ResponderBorrar
    Respuestas
    1. Para colocar 4 decimales, tienes que poner (val, 4), en val pones el numero a trabajar

      Borrar
    2. es como si hubieras dichi que redondeara el numero a dos cifras, debes poner: round(la variable,numero de cifras a redondear)

      Borrar
  2. Respuestas
    1. En Qweb se puede utilizar y tambien en campos calculados, metodos y demas, la metodologia cambiaria el valor fijo por la instancia del registro y el nombre del campo:

      "{0:.4f}".format(self.price_unit)

      round(self.price_unit, 4)

      Borrar
  3. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  4. Estoy probando en odoo 10 su sucede lo siguiente:
    Al usar cost_price = fields.Float(digits=(10,5)en .py inicialmente se muestra 5 dígitos, sin embargo al editar y hacer clic en el campo automáticamente regresa a 2 decimales... como truncar para mantener en 5 dígitos en la vista?

    ResponderBorrar
    Respuestas
    1. Lo mejor es que cambies digits por una precisión decimal, dp

      from odoo.tools import dp

      cost_price = fields.Float('Costo', digits=dp.get_precision('Account'))

      Borrar
  5. Te está diciendo que ese número va a quedar con dos decimales.

    ResponderBorrar
  6. hola, si yo quiero que pasado el",1" lo redondee y de número entero siguiente cómo sería?

    ResponderBorrar
    Respuestas
    1. Seria mas sencillo hacerlo mediante tu propio método o utilizando una expresión regular posiblemente también se podría.

      Borrar
  7. si quiero que redondee con solo 1 decimal como hago?

    ResponderBorrar
  8. Este comentario ha sido eliminado por el autor.

    ResponderBorrar