Truncar un valor decimal en Python

Estoy tratando de truncar un valor decimal en Python. No quiero redondearlo, sino que, en cambio, solo se muestran los valores decimales hasta la precisión especificada. Intenté lo siguiente:

d = 0.989434 '{:.{prec}f}'.format(d, prec=2) 

Esto lo redondea a 0.99. Pero en realidad quiero que la salida sea 0.98. Obviamente, round() no es una opción. ¿Hay alguna manera de hacer esto? ¿O debería volver al código y cambiar todo a decimal ?

Gracias.

No estoy al tanto de todos sus requisitos, pero esto será bastante sólido.

 >> before_dec, after_dec = str(d).split('.') >> float('.'.join((before_dec, after_dec[0:2]))) 0.98 

2018-01-03 editar

Esta respuesta no es robusta o matemáticamente correcta. Consulte la respuesta de Nilani Algiriyage a continuación para conocer la forma correcta de hacerlo utilizando el método de Decimal.quantize .

Puedes usar el siguiente código

 import decimal d = 0.989434 print decimal.Decimal(d).quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN) 
 d = 0.989434 print floor(d * 100) / 100 

Math.floor (x) Devuelve el piso de x como un flotador, el valor entero más grande menor o igual que x.

Mueva los 2 decimales a la izquierda del decimal ‘.’, Piso, y luego retroceda los números a la derecha de ‘.’

100 pueden ser modificados por

 n = 2 m = pow (10, n) d = 0.989434 print floor(d * m) / m 

n es tu precisión deseada.

EDITAR: En el caso d es negativo, tienes que usar el método ceil

 if d < 0: print ceil(d * m) / m else: print floor(d * m) / m 

Formatéelo para algo mucho más largo y luego corte los dígitos adicionales:

 def truncate(f, digits): return ("{:.30f}".format(f))[:-30+digits] 

Esta es la mejor manera que creo.

  1. Mueve los dígitos significativos a la izquierda
  2. Truncar la parte decimal
  3. Mueve el número de dígitos movidos a la izquierda, a la derecha

     d = 0.989434 print "{0:0.2f}".format(int(d * 100)/100.0) 

    Salida

     0.98 
 import math d = 0.989434 prec = 2 output = math.floor(d * (10 ** prec)) / (10 ** prec) 

Si todavía quieres una variable decimal en lugar de una cadena

Bastante similar a algunas otras respuestas, pero sin ninguna importación

 def truncate(x, d): return int(x*(10.0**d))/(10.0**d) >>>truncate(0.987654, 2) 0.98 

con str :

 d = str(0.989434) print float(d[:d.find('.')+3]) 

Si solo necesita mostrarlo, puede convertirlo en una cadena y dividirlo:

 d = 0.989434 print str(d)[0:4] #or print(str(d)[0:4]) 

El código siguiente imprimirá 0.98 en este caso, aunque tendrá que tener cuidado de que su valor d no sea mayor o igual a 10, ya que solo se imprimirá, por ejemplo, 10.1 en lugar de 10.12.

 d = 0.989434 print '{:.{prec}s}'.format(str(d), prec=4) 

También con matemáticas:

 d = 0.989434 x = int(d * 100.0) / 100.0 print "{0:0.2f}".format(x) 

En este enlace aquí publiqué la solución a continuación:

 def truncate_number(f_number, n_decimals): strFormNum = "{0:." + str(n_decimals+5) + "f}" trunc_num = float(strFormNum.format(f_number)[:-5]) return(trunc_num) # Testing the 'trunc_num()' function test_num = 1150/252 [(idx, truncate_number(test_num, idx)) for idx in range(0, 20)] 

Al menos no requiere cargar ningún módulo ni exige nuevos cálculos. Hasta ahora, resolvió mi problema con los requisitos de truncamiento en los cálculos de los precios de los bonos públicos.