Maison  >  Article  >  développement back-end  >  Comment tronquer les valeurs flottantes en Python sans arrondir ?

Comment tronquer les valeurs flottantes en Python sans arrondir ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 19:51:02663parcourir

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]])

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]])

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!

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