2010-09-13 5 views
3

en C#, je peux faire (#. ####), qui imprime jusqu'à 4 chiffres significatifs après le point décimal. 1.2 -> 1.2 1,234 -> 1,234 1,23456789 -> 1,2345est-il intégré en format numérique personnalisé en python?

AFAIK, en python, il n'y a que le c style% .4f qui imprimera toujours à 4 points décimaux rembourré avec 0s à la fin si nécessaire . Je ne veux pas de ces 0.

Des suggestions pour la façon la plus propre de réaliser ce dont j'ai besoin?

Une solution possible est de l'imprimer en premier et de couper moi-même la fin de 0, mais en espérant trouver des moyens plus intelligents.

+2

Cependant, gardez à l'esprit que dans l'ingénierie, 1.2 n'est pas égal à 1,2000 – Rook

+0

« imprime jusqu'à 2 chiffres après la virgule » ... Tu veux dire jusqu'à 4? –

+0

merci, oui, je voulais dire 4. =) édité – Xerion

Répondre

3

Il semble que vous pouvez utiliser le « g » format specifier pour la fonction de chaîne .format() (disponible uniquement en python 2.6+):

>>> x = 1.2 
>>> print "{0:0.4g}".format(x) 
1.2 
>>> x = 1.234565789 
>>> print "{0:0.4g}".format(x) 
1.235 

Cela comprend les chiffres avant et après la virgule, ce qui est la raison pour laquelle vous obtenir 1.235 (arrondi 1.2345 à 4 chiffres). Si vous ne souhaitez que des chiffres significatifs à droite, vous auriez à faire quelque chose de drôle comme

>>> x = 1.23456789 
>>> # length of the number before the decimal 
>>> left_sigdigs = len(str(x).partition(".")[0]) 
>>> format_string = "{0:0." + str(4 + left_sigdigs) + "g}" 
>>> print format_string.format(x) 
1.2346 

Notez qu'il arrondit encore, contrairement à votre exemple.

4

Un grand nombre seraient formatées différemment, mais, pour ceux que vous mentionnez:

>>> for x in (1.2, 1.234, 1.23456789): 
... print '%.4g' % x 
... 
1.2 
1.234 
1.235 

Ceci est l'équivalent traditionnel (travail dans toutes les versions de Python 2.whatever) de l'approche {0:0g}.format plus moderne mentionnées dans @ La réponse de Daniel (uniquement pour Python 3.whatever et 2.6 ou mieux). Par exemple, si vous utilisez Google App Engine (actuellement compatible avec Python 2.5 uniquement), vous devez utiliser l'approche % -operator pour le formatage (impossible d'utiliser la méthode .format de 2,6 ou meilleure).

+1

Je me demande si Google App Engine va être le nouveau Red Hat Linux du point de vue de Python ... (Note historique pour ceux qui demandent WTF: Red Hat Linux ne supporte que Python 1.5 .6 pour plusieurs versions consécutives, même s'il n'était plus développé activement et que Python en avait atteint 2.3 Si vous vouliez que votre code Python soit exécuté sur RHL, vous deviez écrire à 1.5.6 comme vous ne pouviez pas vous attendre 2.x à installer, RHL a finalement expédié Python 2.x avant l'heure de la division RHEL/Fedora.) –

+0

merci Alex. dommage que je ne peux voter qu'une seule réponse. – Xerion

0
>>>x = 36.2215405525 
>>>from decimal import Decimal 
>>>print Decimal(str(x)).quantize(Decimal('0.0001')) 
36.2215 
Questions connexes