77 votes

Tronquer à trois décimales en Python

Comment obtenir 1324343032.324 ?

Comme vous pouvez le voir ci-dessous, les éléments suivants ne fonctionnent pas :

 >>1324343032.324325235 * 1000 / 1000
1324343032.3243253
>>int(1324343032.324325235 * 1000) / 1000.0
1324343032.3239999
>>round(int(1324343032.324325235 * 1000) / 1000.0,3)
1324343032.3239999
>>str(1324343032.3239999)
'1324343032.32'

79voto

Abhranil Das Points 1993

Vous pouvez utiliser un float() supplémentaire autour de celui-ci si vous souhaitez le conserver en tant que float .

 %.3f'%(1324343032.324325235)

60voto

Erwin Mayer Points 3427

Vous pouvez utiliser la fonction suivante pour tronquer un nombre à un nombre défini de décimales :

 import math
def truncate(number, digits) -> float:
    stepper = 10.0 ** digits
    return math.trunc(stepper * number) / stepper

Usage:

 >>> truncate(1324343032.324325235, 3)
1324343032.324

19voto

solveMe Points 1048

J'ai trouvé une autre solution (elle doit être plus efficace que les solutions de contournement "string witchcraft") :

 >>> import decimal
# By default rounding setting in python is decimal.ROUND_HALF_EVEN
>>> decimal.getcontext().rounding = decimal.ROUND_DOWN
>>> c = decimal.Decimal(34.1499123)
# By default it should return 34.15 due to '99' after '34.14'
>>> round(c,2)
Decimal('34.14')
>>> float(round(c,2))
34.14
>>> print(round(c,2))
34.14

À propos du module décimal

À propos des paramètres d'arrondi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X