2009-06-11 6 views

Répondre

5

Je ne pense pas qu'il y ait une le format prédéfini pour ce format en python est hérité de C, et je suis sûr que vous n'avez pas le format désiré en C.

Maintenant, en python 3, vous avez le format fonction spéciale, où vous pouvez faire votre propre mise en forme. La suppression des derniers zéros en python est très simple: il suffit d'utiliser la méthode de la bande:

a = 1.23040000 
print str(a).rstrip('0') 

Si vous voulez garder un 0 après la virgule, ce n'est pas soit très difficile.

+0

Ok, super! Maintenant je dois juste faire face à la situation 1.000000 -> 1.0 séparément, n'importe quelle façon courte de faire cela, c'est-à-dire vérifier s'il n'y a que des zéros après "."? – zequzd

+4

Je voudrais aller à la réponse directe: détecter si le dernier caractère est un point, et ajouter un 0 si c'est le cas. Gardez à l'esprit que cela ne fonctionnera pas sous la localisation (par exemple dans ma langue maternelle, le français, nous utilisons ',' pour le point décimal et '.' Pour le séparateur des milliers). –

1

L'opérateur '%2.2f' ne faire de même nombre de décimales quel que soit le nombre de chiffres significatifs du nombre a. Vous devrez l'identifier dans le numéro et manuellement le format. Vous pourriez être en mesure de raccourcir cela en imprimant à une chaîne avec un grand nombre de décimales et dépouiller tous les zéros de fin.

Une fonction trivial de faire cela pourrait ressembler à quelque chose comme intel_format() dans l'exemple ci-dessous:

import re 

foo_string = '%.10f' % (1.33333) 
bar_string = '%.10f' % (1) 

print 'Raw Output' 
print foo_string 
print bar_string 

print 'Strip trailing zeros' 
print re.split ('0+$', foo_string)[0] 
print re.split ('0+$', bar_string)[0] 

print 'Intelligently strip trailing zeros' 
def intel_format (nn): 
    formatted = '%.10f' % (nn) 
    stripped = re.split('0+$', formatted) 
    if stripped[0][-1] == '.': 
     return stripped[0] + '0' 
    else: 
     return stripped[0] 

print intel_format (1.3333) 
print intel_format (1.0) 

Lorsque l'exécution, vous obtenez cette sortie:

Raw Output 
1.3333300000 
1.0000000000 
Strip trailing zeros 
1.33333 
1. 
Intelligently strip trailing zeros 
1.3333 
1.0 
+0

Merci! Je suis également arrivé à tester si float_variable% 1 == 0, pour ce faire. – zequzd

9

Comment utiliser le module décimal?

De l'documentation:...

« Le module décimal intègre une notion de lieux importants de sorte que 1,30 + 1,20 2,50 Le zéro de fuite est conservé pour indiquer la signification C'est la présentation habituelle pour les applications monétaires pour la multiplication , l'approche « Schoolbook » utilise tous les chiffres dans les multiplicandes Par exemple, 1,3 * 1,2 donne 1,56 alors que 1,30 * 1,20 donne 1,5600 "

la fonction normalize() supprime les zéros de fin:..

>>> from decimal import * 
>>> d1 = Decimal("1.30") 
>>> d2 = Decimal("1.20") 
>>> d3 
Decimal("1.5600") 
>>> d3.normalize() 
Decimal("1.56") 
+0

Oui, cela pourrait aussi.Cependant, le programme que j'ai dû écrire était par nature scientifique ou n'avait rien à voir avec la signification, c'était plutôt un exercice banal, mais maintenant ça marche. Je vous remercie! – zequzd

-2
def float_remove_zeros(input_val): 
    """ 
    Remove the last zeros after the decimal point: 
    * 34.020 -> 34.02 
    * 34.000 -> 34 
    * 0 -> 0 
    * 0.0 -> 0 
    """ 
    stripped = input_val 
    if input_val != 0: 
     stripped = str(input_val).rstrip('0').rstrip('.') 
    else: 
     stripped = 0 
    return stripped 
+0

-1: De la question: quand le flotteur est 104.06250000 le programme devrait imprimer 104.0625 ... 119.00000 ou 72.000000 ... devrait ... [être] 119.0 et 72.0.

4

Je pense que le moyen le plus simple serait la fonction "ronde". dans votre cas:

>>> round(104.06250000,4) 
104.0625 
0

Vous pouvez utiliser le format de méthode de chaîne si vous utilisez Python 2.6 et supérieur.

>>> print "{0}".format(1.0) 
1.0 
>>> print "{0}".format(1.01) 
1.01 
>>> print "{0}".format(float(1)) 
1.0 
>>> print "{0}".format(1.010000) 
1.01 
Questions connexes