Je sais comment contrôler le nombre de décimales, mais comment contrôler le nombre de zéros spécifiquement?Imprimer des flottants avec un nombre spécifique de zéros
Par exemple:
104.06250000 -> 104.0625
119.00000 -> 119.0
72.000000 -> 72.0
Je sais comment contrôler le nombre de décimales, mais comment contrôler le nombre de zéros spécifiquement?Imprimer des flottants avec un nombre spécifique de zéros
Par exemple:
104.06250000 -> 104.0625
119.00000 -> 119.0
72.000000 -> 72.0
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.
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
Merci! Je suis également arrivé à tester si float_variable% 1 == 0, pour ce faire. – zequzd
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")
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
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
-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.
–
Je pense que le moyen le plus simple serait la fonction "ronde". dans votre cas:
>>> round(104.06250000,4)
104.0625
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
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
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). –