Je dois imprimer un nombre en python de cette forme: n = "35.66667" La sortie devrait être "35.666". Maintenant, j'ai essayé la fonction round () en python jusqu'à 3 décimales mais cela me donne un résultat incorrect de 35,667.

Une idée comment puis-je imprimer la valeur flottante jusqu'à 3 décimales sans arrondir ?

-1
Agniswar Bakshi 7 août 2016 à 16:52

5 réponses

Meilleure réponse

Oui, mais c'est la question posée. Pour imprimer la valeur flottante jusqu'à 3 décimales sans arrondir.

Coupez donc la représentation de la chaîne:

def trim_float(n, d):
    n_str = str(n)
    point_index = n_str.find('.')
    return float(n_str[:point_index + d + 1])

print(trim_float(35.66667, 3))
>> 35.666
3
DeepSpace 7 août 2016 à 14:21

Dans des circonstances académiques, la réponse pourrait être par exemple:

"convertir la chaîne en un flottant, math.floor la convertir en 3 décimales et la reconvertir en chaîne"

Dans la vie réelle (ou lors d'un entretien avec une entreprise pour laquelle vous souhaitez travailler), la bonne réponse est:

"Pourquoi?!? Veuillez expliquer le raisonnement qui sous-tend cette logique métier avant de tenter une implémentation."

1
Aprillion 7 août 2016 à 14:07

Si vous souhaitez contraindre 35.66667 à 35.666 (c'est-à-dire arrondir vers le bas), cela pourrait fonctionner:

import math

n = 35.6667

print(math.floor(n * 1000) / 1000)

Sortie

35.666

Espérons que quelqu'un d'autre puisse publier une manière plus élégante d'accomplir cela, cependant.

0
Tagc 7 août 2016 à 13:58

Il semble que vous souhaitiez tronquer le tout après la troisième décimale. Arrondir vous donne le résultat arrondi correct, mais pas ce dont vous avez besoin.

Vous pouvez simplement couper les décimales indésirables.

n = "35.66667"
print(float(n[:-2]))
=> 35.666
0
ast 7 août 2016 à 14:10

En utilisant format:

n = 35.66667
print "{0!s:.6}".format(n)
# 35.666
0
Daniel 7 août 2016 à 14:02