2015-08-07 4 views
0

C'est ce que j'ai:
x = 2.00001Comment fixer décimale à virgule flottante à deux endroits, même si le nombre est 2,00000

C'est ce que je dois:
x = 2.00

J'utilise:
float("%.2f" % x)

Mais tout ce que je reçois est:
2

Comment puis-je limiter les décimales à deux ET m'assurer qu'il y a toujours deux décimales même si elles sont nulles?
Remarque: Je ne souhaite pas que la sortie finale soit une chaîne.

+0

Où voulez-vous que ce 'deux places' décimales? Les nombres à virgule flottante interne sont stockés au format binaire, cela dépend essentiellement de l'endroit où vous voulez que ces deux décimales soient formatées. Numéro à virgule flottante –

+1

Salut Shil, pour quoi l'utilisez-vous? Si vous avez besoin de la valeur, alors bien sûr 2.00 == 2. Si vous avez besoin de l'afficher, pourquoi ne pouvez-vous pas le convertir en une chaîne? –

+0

Essayez-vous de représenter une quantité de dollars et de cents en utilisant un flotteur? Ceci est généralement déconseillé en raison de la nature imprécise des nombres à virgule flottante.Il y a souvent des [conséquences néfastes] (https://en.wikipedia.org/wiki/Office_Space) lorsque les transactions financières finissent par perdre une fraction de cent ici ou là. – Kevin

Répondre

0

Cela fonctionne:

'%.2f" % float(x) 

Auparavant, je répondu avec ceci:

Comment cela?

def fmt2decimals(x): 
    s = str(int(x*100)) 
    return s[0:-2] + '.' + s[-2:] 

vous ne pouvez pas AFAIK obtenir zéros avec une spécification de format comme %.2f.

+0

Ce serait bien si le nombre devait être stocké comme une chaîne formatée, mais l'OP veut qu'il soit stocké comme un flottant avec un certain nombre de zéros de fin, ce qui n'est malheureusement pas possible autant que je sache. – TigerhawkT3

+0

Ok - Je suppose que je comprends la question maintenant. – ErikR

0

Avez-vous pris un coup d'œil sur le module decimal? Il vous permet de faire de l'arithmétique, tout en maintenant la précision correcte:

>>> from decimal import Decimal 
>>> a = Decimal("2.00") 
>>> a * 5 
Decimal('10.00') 
>>> b = Decimal("0.05") 
>>> a * b 
Decimal('0.1000') 
0

Python a également une fonction de commande interne « ronde »: x = round(2.00001, 2) je crois est la commande que vous utilisez.

+0

J'essaye de sauvegarder finalement les données numériques en tant que fichier csv, et je préférerais ne pas avoir de guillemets autour des nombres, et rester cohérent avec le nombre de décimales en même temps. – Shil

+0

@Shil Cela ne devrait pas être un problème, disons que vous aviez une liste comme 'list = [2.00001, 3.0134, 1.0]' et vous voulez écrire cela comme une ligne de CSV. Vous pouvez simplement utiliser le format et joindre comme ceci: '','. Join (['{0: .2f}'. Format (item) pour item dans la liste])'. Lorsque vous écrivez ceci dans un fichier, il n'y aura pas de guillemets autour de la ligne et il ressemblera à ceci: '2.00,3.01,1.00' – isosceleswheel

+0

Merci, mais je dois le garder dans un format de liste afin que je puisse appliquer des fonctions comme insert(). – Shil

0

Eh bien, en Python, vous ne pouvez pas vraiment arrondir à deux zéros sans que le résultat ne soit une chaîne. Python sera toujours toujours arrondi au premier zéro en raison de la façon dont les entiers flottants sont stockés. Vous pouvez arrondir à deux chiffres si le deuxième chiffre est pas zéro, cependant.

Par exemple, ceci:

round(2.00001, 2) 
#Output: 2.0 

vs ceci:

round(2.00601, 2) 
#Output: 2.01