2012-06-13 29 views
10

Tôi có những điều sau đây để định dạng một chuỗi:Làm thế nào để có số không âm luôn luôn được định dạng là số không dương trong một chuỗi python?

'%.2f' % n 

Nếu n là một số không âm (-0, -0.000 vv) sản lượng sẽ được -0.00.

Làm cách nào để làm cho đầu ra luôn là 0.00 cho cả giá trị số 0 âm và dương của n?

(Nó là khá thẳng về phía trước để đạt được điều này nhưng tôi không thể tìm thấy những gì tôi sẽ gọi một cách pythonic gọn gàng. Lý tưởng nhất là có một chuỗi lựa chọn rằng tôi không nhận thức được định dạng.)

+0

[x + (-0) = x] (http://en.wikipedia.org/wiki/Signed_zero# Số học) – georg

Trả lời

31

Thêm zer o:

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

mà bạn có thể định dạng:

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

Điều này thực sự khiến tôi cười to. Tuyệt vời. –

+2

Trong ví dụ của bạn, bạn có thể thay đổi '0.' thành' 0'. – jamylak

+0

@jamylak - bạn nói đúng, tôi có thể. – eumiro

-1

Bạn có thể sử dụng abs chức năng

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

Nếu anh ta muốn in '-2.0' và' 0.0' nhưng không phải là '-0.0' thì sao? – jamylak

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

ví dụ:

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 

lý do cho điều kiện if:

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

@jamylak Ah! Tôi đã bỏ lỡ điều kiện khác. –

+0

Bạn có thể rút ngắn nó thành '' {0: .2f} 'này.định dạng (abs (n) nếu n == 0 khác n) ' – jamylak

+0

@jamylak gợi ý triển khai. –

2

Cách đơn giản nhất là để specialcase zero trong định dạng của bạn:

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

Tuy nhiên, đừng lưu ý rằng phương pháp str.format được ưa thích hơn % thay thế - cú pháp trong trường hợp này (và trong những trường hợp đơn giản nhất) là gần như giống hệt nhau:

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

Cũng lưu ý rằng các súc tích hơn a or abs(a) doesn' dường như - mặc dù bool(a)False.

0

Sự cố liên quan rất chặt chẽ là -0.00001 cũng được định dạng là "-0.00". Điều đó có thể chỉ là khó hiểu. Các câu trả lời ở trên sẽ không giải quyết vấn đề này (ngoại trừ user278064, cần regexp).

Nó xấu xí, nhưng điều này là tốt nhất tôi có thể làm cho trường hợp này:

import re 
re.sub (r"^-(0\.?0*)$", r"\1", "%.2f" % number) 
Các vấn đề liên quan