Maison  >  Article  >  développement back-end  >  Comment tronquer les valeurs flottantes à un nombre spécifique de décimales en Python sans arrondir ?

Comment tronquer les valeurs flottantes à un nombre spécifique de décimales en Python sans arrondir ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 00:25:02264parcourir

How to Truncate Float Values to a Specific Number of Decimal Places in Python without Rounding?

Comment tronquer les valeurs flottantes à un nombre spécifique de décimales

En Python, vous pouvez supprimer des chiffres d'un flottant pour obtenir une valeur fixe nombre de chiffres après la virgule. Prenons l'exemple suivant :

1.923328437452 → 1.923

Tronquer le flottant à trois décimales donne le résultat souhaité de 1,923.

Solution

La fonction ci-dessous effectue cette tâche :

def truncate(f, n):
    '''Truncates/pads a float f to n decimal places without rounding'''
    s = '{}'.format(f)
    if 'e' in s or 'E' in s:
        return '{0:.{1}f}'.format(f, n)
    i, p, d = s.partition('.')
    return '.'.join([i, (d+'0'*n)[:n]])

Explication

La fonction convertit le flottant en une représentation sous forme de chaîne, le divisant en trois parties : la partie entière, le point décimal , et la partie fractionnaire. Il remplit ensuite la partie fractionnaire avec des zéros jusqu'au nombre spécifié de décimales, garantissant que tous les chiffres en excès sont tronqués.

Gestion de la notation scientifique

La fonction vérifie si le flotteur est représenté en notation scientifique (e ou E) et utilise une fonction de format différente pour préserver l'exposant.

Anciennes versions de Python

Pour les versions Python antérieures à 2.7 , vous pouvez toujours tronquer les flottants, mais le résultat peut ne pas être aussi précis en raison des limitations du mécanisme de formatage en virgule flottante. Une solution possible consiste à arrondir le flottant avec une plus grande précision avant de le tronquer :

def truncate(f, n):
    '''Truncates/pads a float f to n decimal places without rounding'''
    s = '%.12f' % f
    i, p, d = s.partition('.')
    return '.'.join([i, (d+'0'*n)[:n]])

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn