2012-06-13 13 views
10

Ho la seguente per formattare una stringa:Come avere lo zero negativo sempre formattato come zero positivo in una stringa python?

'%.2f' % n 

Se n è uno zero negativo (-0, -0.000 ecc), l'uscita sarà -0.00.

Come faccio a rendere l'output sempre 0.00 per i valori zero positivi e negativi di n?

(E 'abbastanza semplice per raggiungere questo obiettivo, ma non riesco a trovare quello che chiamerei un modo divinatorio succinta. Idealmente c'è una stringa di opzione di formattazione che io non sono a conoscenza.)

+0

[x + (-0) = x] (http://en.wikipedia.org/wiki/Signed_zero# Aritmetica) – georg

risposta

31

Aggiungi zer o:

>>> a = -0.0 
>>> a + 0 
0.0 

cui è possibile formattare:

>>> '{0:.3f}'.format(a + 0) 
'0.000' 
+14

Questo mi ha fatto ridere ad alta voce. Meraviglioso. –

+2

Nel tuo esempio puoi cambiare da '0' a' 0'. – jamylak

+0

@jamylak: hai ragione, posso. – eumiro

-1

È possibile utilizzare abs funzione

In [27]: abs(-0) 
Out[27]: 0 

In [28]: abs(-1) 
Out[28]: 1 

In [29]: abs(-2) 
Out[29]: 2 

In [30]: abs(-2) == -2 
Out[30]: False 

In [31]: abs(-2) == 2 
Out[31]: True 
+7

E se volesse stampare '-2.0' e' 0.0' ma non '-0.0'? – jamylak

1
import re 
re.sub("[-+](0\.0+)", r"\1", number) 

esempio:

re.sub("[-+](0\.0+)", r"\1", "-0.0000") // "0.0000" 
re.sub("[-+](0\.0+)", r"\1", "+0.0000") // "0.0000"  
1
>>> x= '{0:.2f}'.format(abs(n) if n==0 else n) 
>>> print(x) 
0.00 

ragione per la condizione if:

>>> -0.0000==0 
True 
>>> 0.000==0 
True 
>>> 0.0==0 
True 
+0

@jamylak Ah! Ho perso l'altra condizione. –

+0

Puoi accorciarlo a questo '' {0: .2f} '.formato (abs (n) if n == 0 altro n) ' – jamylak

+0

suggerimento @jamylak implementato. –

2

Il modo più semplice è quello di specialcase zero nel tuo formato:

>>> a = -0.0 
>>> '%.2f' % (a if a != 0 else abs(a)) 
0.0 

Tuttavia, si noti che il metodo str.format è preferito oltre % sostituzioni - la sintassi in questo caso (e nei casi più semplici) è quasi identica:

>>> '{:.2f}'.format(a if a != 0 else abs(a)) 

noti inoltre che più concisa a or abs(a) doesn' Sembra - anche se bool(a) è False.

0

Un problema strettamente correlato è che -0.00001 è anche formattato come "-0.00". Questo può essere altrettanto confuso. Le risposte di cui sopra non si prenderanno cura di questo (tranne per user278064, che ha bisogno di un'ergema regexp).

E 'brutto, ma questo è il meglio che posso fare per questo caso:

import re 
re.sub (r"^-(0\.?0*)$", r"\1", "%.2f" % number) 
Problemi correlati