web-dev-qa-db-fra.com

Comment transformer un nombre flottant comme 293.4662543 en 293.47 en python?

Comment raccourcir le résultat flottant que j'ai obtenu? Je n'ai besoin que de 2 chiffres après le point. Désolé, je ne sais vraiment pas comment expliquer cela mieux en anglais ...

Merci

23
Shane

De The Floating-Point Guide's Aide-mémoire Python :

"%.2f" % 1.2399 # returns "1.24"
"%.3f" % 1.2399 # returns "1.240"
"%.2f" % 1.2 # returns "1.20"

L'utilisation de round () n'est pas la bonne chose à faire, car les flottants sont fractions binaires qui ne peuvent pas représenter avec précision les chiffres décimaux.

Si vous devez effectuer des calculs avec des chiffres décimaux, utilisez le type Decimal dans le module decimal.

45
Michael Borgwardt

Si vous voulez un nombre, utilisez la fonction round() :

>>> round(12.3456, 2)
12.35

(mais +1 pour la réponse de Michael concernant le type Decimal.)

Si vous voulez une chaîne:

>>> print "%.2f" % 12.34567
12.35
22
RichieHindle

From: Python Docs round (x [ n]) Renvoie la valeur à virgule flottante x arrondie à n chiffres après la virgule décimale. Si n est omis, il vaut zéro par défaut. Le résultat est un nombre à virgule flottante. Les valeurs sont arrondies au multiple de 10 le plus proche de la puissance moins n; si deux multiples sont également proches, l'arrondi est effectué à partir de 0 (ainsi, par exemple, arrondir (0,5) vaut 1,0 et arrondir (-0,5) vaut -1,0).

Remarque Le comportement de round () pour les flottants peut être surprenant: par exemple, round (2.675, 2) donne 2,67 au lieu de 2,68 attendu. Ce n'est pas un bug: c'est le résultat du fait que la plupart des fractions décimales ne peuvent pas être représentées exactement comme un flottant. Voir Arithmétique en virgule flottante: problèmes et limites pour plus d'informations.

On dirait que rond (293.466 .... [ 2]) le ferait,

7
onaclov2000

J'espère que cela vous aidera.

def do(*args):
    formattedList = [float("{:.2f}".format(num)) for num in args]
    _result =(sum(formattedList))
    result = round(_result,2)
    return result


print(do(23.2332,45.24567,67,54.27))

Résultat:

189.75
6
Xavi Martínez

x = round(293.4662543, 2)

5
Ethan Shepherd
>>> print "%.2f" % 293.44612345
293.45
3
ghostdog74

Une manière:

>>> number = 1
>>> '{:.2f}'.format(number) #1.00
>>> '{:.3f}'.format(number) #1.000

deuxième voie:

>>> '%.3f' % number #1.000
>>> '%.3f' % number #1.000

voir "format python"

1
AlexNikonov

Si vous avez besoin de nombres comme 2.3k ou 12M, cette fonction fait le travail:

def get_shortened_integer(number_to_shorten):
    """ Takes integer and returns a formatted string """
    trailing_zeros = floor(log10(abs(number_to_shorten)))
    if trailing_zeros < 3:
        # Ignore everything below 1000
        return trailing_zeros
    Elif 3 <= trailing_zeros <= 5:
        # Truncate thousands, e.g. 1.3k
        return str(round(number_to_shorten/(10**3), 1)) + 'k'
    Elif 6 <= trailing_zeros <= 8:
        # Truncate millions like 3.2M
        return str(round(number_to_shorten/(10**6), 1)) + 'M'
    else:
        raise ValueError('Values larger or equal to a billion not supported')

Résultats:

>>> get_shortened_integer(2300)
2.3k # <-- str

>>> get_shortened_integer(1300000)
1.3M # <-- str
1
chribsen