Maison > développement back-end > Tutoriel Python > 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
Libérer: 2024-11-06 00:25:02
original
378 Les gens l'ont consulté

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
Copier après la connexion

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]])
Copier après la connexion

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]])
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal