Comment tronquer les valeurs flottantes en Python sans arrondir ?

Susan Sarandon
Libérer: 2024-11-05 19:51:02
original
662 Les gens l'ont consulté

How to Truncate Float Values in Python Without Rounding?

Comment tronquer les valeurs flottantes sans arrondir ?

Tronquer une valeur flottante à un nombre spécifique de décimales, sans arrondir, peut être réalisé en Python à l'aide de la commande 'truncate( )' fonction. Cette fonction prend deux arguments : la valeur flottante à tronquer et le nombre de décimales à conserver. Voici une implémentation de la fonction qui utilise l'arrondi intelligent :

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 float en chaîne, garantissant que la précision totale est préservée. Il divise ensuite la chaîne en trois parties : la partie entière, le point décimal et les chiffres décimaux. Il conserve les chiffres décimaux, en les complétant avec des zéros si nécessaire, et rejoint les parties pour former la chaîne tronquée.

Arrondi intelligent

Dans certains cas, il n'est pas possible de représenter exactement un flottant en décimal notation. Par exemple, 0,3 exactement peut être représenté avec précision sous forme de nombre flottant IEEE mais pas sous forme décimale. Dans de tels cas, la fonction utilise l'opération de formatage de chaîne par défaut fournie par Python 2.7 et versions ultérieures. Cette opération sélectionne intelligemment la représentation décimale la plus proche du flottant, sans arrondi.

Méthode alternative pour les anciennes versions de Python

Si vous utilisez des versions de Python antérieures à 2.7 ou 3.0, vous pouvez tronquer le float et arrondissez-le à un grand nombre de décimales (par exemple, 12) avant de formater le résultat sous forme de chaîne. Cette approche est moins précise mais fonctionne bien dans la plupart des cas :

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

Mises en garde

Notez que l'arrondi intelligent peut produire des faux positifs, où des nombres sont arrondis alors qu'ils n'étaient pas destinés à l'être. Pour éviter cela, une précision fixe peut être utilisée. De plus, les versions antérieures de Python peuvent produire des représentations décimales inexactes. Dans de tels cas, il est recommandé d'utiliser la solution de contournement à 12 chiffres.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!