Je convertirais une chaîne avec une grande précision, puis couperais tout sauf les premiers caractères.
def trunc(f, n):
'''Truncates/pads a float f to n decimal places without rounding'''
slen = len('%.*f' % (n, f))
return str(f)[:slen]
(édité pour corriger des bugs)
En réponse à votre commentaire: la version ci-dessus n'inclut pas les zéros, mais voici mon ancienne version:
def trunc(f, n):
'''Truncates/pads a float f to n decimal places without rounding'''
return ('%.*f' % (n + 1, f))[:-1]
Ce dernier échoue dans certains cas, comme trunc (11.999999, 3)