2012-06-13 7 views
10

Iは、文字列の書式を設定するために、以下た:負のゼロを持つ方法は、常にPythonの文字列で正のゼロとして書式設定されていますか?

'%.2f' % n 

nは負のゼロ(-0-0.000など)である場合、出力は-0.00あろう。

の負のゼロ値と正のゼロ値の両方について、出力を常に0.00にするにはどうすればよいですか?

(それは、これを達成するために、かなり単純ですが、私は、私は簡潔神託の方法を呼ぶようなものを見つけることができません。理想的には私は知りませんオプションのフォーマット文字列がある。)

+0

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

答えて

31

はZERを追加O:

あなたがフォーマットでき
>>> a = -0.0 
>>> a + 0 
0.0 

if条件の

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

これは実際に私を大声で笑ってしまった。素晴らしい。 –

+2

あなたの例では、 '0'を' 0'に変更することができます。 – jamylak

+0

@jamylak - そうです、できます。 – eumiro

-1

あなたはabs機能を使用することができます

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

'-2.0'と' 0.0'を出力したいのに '-0.0'を出力しないとどうなるでしょうか? – jamylak

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

例:

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 

理由:

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

@jamylakああ!私はelse条件を逃しました。 –

+0

この '' {0:.2f} 'に短縮することができます。format(abs(n)if n == 0 else n) ' – jamylak

+0

@jamylakの提案が実装されました。 –

2

最も簡単な方法は、あなたの形式でゼロをspecialcaseすることです。

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

はしかし、str.format方法が%置換よりも好ましいことに注意してください - この場合には構文(そして最も単純な例では)ほぼ同じです:

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

はまた、「doesnのそれより簡潔a or abs(a)の点に注意してください。たとえbool(a)Falseであっても、そうではありません。

0

非常に密接に関連する問題は、-0.00001も "-0.00"と書式化されていることです。それはちょうど混乱することができます。上記の答えはこれを処理しません(user278064の場合を除き、アンカー付き正規表現が必要です)。

それは醜いですが、これは私がこのような場合のためにできる最善である:

import re 
re.sub (r"^-(0\.?0*)$", r"\1", "%.2f" % number) 
関連する問題