es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quiero mostrar solo los lugares decimales “Truncar flotantes sin redondear”.

Mi código ha mostrado bien hasta el segundo lugar decimal hasta ahora.

res4 = Decimal(‘%.2f’ % (res4 * 100 / 100))

pero tengo un problema

35.3169 –> 35.32

¿Por qué se está redondeando hacia arriba?
Quiero desechar todo a partir del tercer lugar decimal.
Y si no hay segundo lugar decimal, quiero que sea 0.
¡Ayuda, hermano!

No creo que sea la manera correcta de hacerlo.

def truncate_number(num, limit):
  int_part, fract_part = str(Decimal(num)).split('.')
  return Decimal(f'{int_part}.{fract_part[:limit]}')

[input] truncate_number(35.3169, 2)
[output] 35.31
[input] truncate_number(31.1, 2)
[output] 31.10
[input] truncate_number(31.4, 2)
[output] 31.39
[input] truncate_number(31.5, 2)
[output] 31.5
[input] truncate_number(30.22, 2)
[output] 30.21

¿Qué está pasando?
Quiero mostrar hasta el segundo decimal más pequeño.
Quiero desechar el tercer dígito.
Y si no hay segundo lugar decimal, quiero que sea 0.

*** * *** Creo que necesito usar esto. *** * ***

res4 = math.floor(res4 * 1000) / 100
res4_2f='%.2f' % (res4 / 10)
[input] 40.41
[output] 40.41

¡Dime un consejo!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando truncar un número a dos decimales. Una forma de hacer esto es utilizando el módulo Decimal incorporado de Python. El código que has proporcionado parece funcionar bien para truncar a dos decimales, pero puede haber casos en los que desees truncar a un número diferente de decimales.

    Si deseas truncar a dos decimales y hacer que el tercer decimal sea cero si existe, puedes modificar el código existente de la siguiente manera:

    from decimal import Decimal
    
    def truncar_numero(num):
      return Decimal(f'{num:.2f}')
    
    # Ejemplos
    print(truncar_numero(35.3169)) # Resultado: 35.31
    print(truncar_numero(31.1)) # Resultado: 31.10
    print(truncar_numero(31.4)) # Resultado: 31.40
    print(truncar_numero(31.5)) # Resultado: 31.50
    print(truncar_numero(30.22)) # Resultado: 30.22
    

    Aquí estamos utilizando las f-strings de Python para formatear el número a dos decimales. Si el tercer decimal existe, automáticamente se redondeará hacia abajo a cero debido al uso de Decimal. Si no hay segundo decimal, automáticamente se agregará y se establecerá en cero también.

    Alternativamente, si deseas truncar a un número diferente de decimales, puedes modificar el argumento de la función de acuerdo a ello:

    from decimal import Decimal
    
    def truncar_numero(num, dp):
      return Decimal(f'{num:.{dp}f}')
    
    # Ejemplos
    print(truncar_numero(35.3169, 3)) # Resultado: 35.316
    print(truncar_numero(31.12345, 4)) # Resultado: 31.1234
    print(truncar_numero(31.56789, 1)) # Resultado: 31.5
    

    Aquí, estamos utilizando un segundo argumento dp para especificar el número de decimales a truncar. Formateamos el número en consecuencia utilizando las f-strings y Decimal. Si hay más decimales de los especificados por dp, se truncarán en consecuencia.

    ¡Espero que esto te ayude!

Comments are closed.