Después de buscar una manera de resolver este problema, sin cargar ningún módulo de Python 3 ni operaciones matemáticas adicionales, resolví el problema usando solo str.format() e .float().Creo que de esta manera es más rápido que usar otras operaciones matemáticas, como en la solución más común. Necesitaba una solución rápida porque trabajo con un conjunto de datos muy grande y por eso funciona muy bien aquí.
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)]
devuelve el siguiente resultado:
[(0, 4.0),
(1, 4.5),
(2, 4.56),
(3, 4.563),
(4, 4.5634),
(5, 4.56349),
(6, 4.563492),
(7, 4.563492),
(8, 4.56349206),
(9, 4.563492063),
(10, 4.5634920634),
(11, 4.56349206349),
(12, 4.563492063492),
(13, 4.563492063492),
(14, 4.56349206349206),
(15, 4.563492063492063),
(16, 4.563492063492063),
(17, 4.563492063492063),
(18, 4.563492063492063),
(19, 4.563492063492063)]
No hay tal valor en el conjunto que están representados por números en coma flotante. –
En caso de que el comentario de Karl no sea lo suficientemente claro: * no hay un número * como 1324343032.324 en coma flotante binario. Si cambia a una versión superior de Python (2.7 o 3.1 o posterior), el intérprete * le mostrará * 1324343032.324. Pero en realidad, el número con el que está computando no es ni 1324343032.324 ni 1324343032.3239999 independientemente de la versión de Python. La única manera de obtener * exactamente * 1324343032.324 es usar el módulo 'decimal' o alguna otra biblioteca matemática de precisión arbitraria, como' gmpy'. –
La respuesta aceptada a continuación es correcta, si desea redondear (subir) a una cantidad determinada de decimales. Sin embargo, lo que la pregunta está haciendo y lo que quería saber es cómo truncar a un número particular de decimales. Para mí, ''% .3f'% (1324343032.3243)' y ''% .3f'% (1324343032.3245)' dan resultados diferentes. (Estoy usando Python 2.7.8). – nullstellensatz