Configuración de Python Decimal Rango de lugar sin redondear?

¿Cómo puedo tomar una variable flotante y controlar qué tan lejos va el flotador sin round ()? Por ejemplo.

w = float(1.678) 

Quiero tomar x y hacer las siguientes variables.

 x = 1.67 y = 1.6 z = 1 

Si utilizo los respectivos métodos de ronda:

 x = round(w, 2) # With round I get 1.68 y = round(y, 1) # With round I get 1.7 z = round(z, 0) # With round I get 2.0 

Va a redondear y alterar los números hasta el punto en que no me sirva. Entiendo que este es el punto de ronda y está funcionando correctamente. ¿Cómo podría obtener la información que necesito en las variables x, y, z y seguir pudiendo usarlas en otras ecuaciones en un formato flotante?

Tu puedes hacer:

 def truncate(f, n): return math.floor(f * 10 ** n) / 10 ** n 

pruebas:

 >>> f=1.923328437452 >>> [truncate(f, n) for n in range(7)] [1.0, 1.9, 1.92, 1.923, 1.9233, 1.92332, 1.923328] 

Una solución super simple es usar cuerdas.

 x = float (str (w)[:-1]) y = float (str (w)[:-2]) z = float (str (w)[:-3]) 

Cualquiera de las soluciones de biblioteca de punto flotante requerirá que esquive un poco de redondeo, y el uso de floor / powers of 10 para seleccionar los decimales puede ser un poco peludo en comparación con lo anterior.

Si solo necesitas controlar la precisión en formato.

 pi = 3.14159265 format(pi, '.3f') #print 3.142 # 3 precision after the decimal point format(pi, '.1f') #print 3.1 format(pi, '.10f') #print 3.1415926500, more precision than the original 

Si necesita controlar la precisión en aritmética de coma flotante.

 import decimal decimal.getcontext().prec=4 #4 precision in total pi = decimal.Decimal(3.14159265) pi**2 #print Decimal('9.870') whereas '3.142 squared' would be off 

–editar–

Sin “redondear”, truncando así el número.

 import decimal from decimal import ROUND_DOWN decimal.getcontext().prec=4 pi*1 #print Decimal('3.142') decimal.getcontext().rounding = ROUND_DOWN pi*1 #print Decimal('3.141')