2012-05-08 60 views
8

Nếu tôi có ví dụ x = 40 Tôi muốn các kết quả sau:Python chuỗi suy: chỉ hiển thị chữ số thập phân cần thiết

40" 

Đối với x = 2,5 kết quả nên được như thế ...

2.5" 

Vì vậy, về cơ bản tôi muốn định dạng tối đa một chữ số thập phân. Tôi hiện đang sử dụng này:

"{0:0.1f}\"".format(x, 1) 

Nhưng điều này luôn hiển thị chính xác một nơi thập phân, mà không phải là thực sự những gì tôi muốn ...

+0

Điều gì sẽ xảy ra với -0.05? –

+0

Bạn có muốn làm tròn hoặc cắt ngắn các chữ số sau không? – prelic

Trả lời

9

Một lựa chọn là một cái gì đó giống như

"{0}\"".format(str(round(x, 1) if x % 1 else int(x))) 

đó sẽ hiển thị x làm số nguyên nếu không có phần phân số. Có thể là một cách tốt hơn để đi về điều này.

+0

Cảm ơn bạn rất nhiều! :) – dom0

+0

Không sao cả :) Rất vui được giúp. Mặc dù tò mò để xem nếu có ai khác có một cách sạch hơn để đi về điều này. –

+0

Định danh thứ 2 của arg là '' (...) 'là gì? (ở đây: 1) – lajarre

3

giải pháp Có lẽ không nhất thiết phải hoàn toàn sạch sẽ, nhưng tôi nghĩ rõ ràng hơn ít nhất một chút:

"{1:0.{0}f}\"".format(int(not float(x).is_integer()), x) 

có thể được thay thế bằng khó hiểu hơn (dựa trên Michael Mior làm tròn ý tưởng):

"{1:0.{0}f}\"".format(int(x % 1 > 0), x) 

nếu bạn thích các biểu thức ngắn hơn (ít suy nhược hơn).

+0

Một lần tôi thấy tính hữu dụng thực sự của 'định dạng'. Và phiên bản thứ 2 vượt trội hơn tôi (sạch hơn) – lajarre

4

Đây là tái sử dụng, có thể được sử dụng trên str, float, hoặc int, và sẽ chuyển đổi ''-0:

def minimalNumber(x): 
    if type(x) is str: 
     if x == '': 
      x = 0 
    f = float(x) 
    if f.is_integer(): 
     return int(f) 
    else: 
     return f 

Sử dụng với:

print "{}\"".format(minimalNumber(x)) 

Ví dụ:

x = 2.2 
print "{}\"".format(minimalNumber(x)) 
x = 2.0 
print "{}\"".format(minimalNumber(x)) 

kết quả đầu ra:

2.2" 
2" 
+1

Bạn có thể muốn sử dụng 'float (x) .is_integer()' để cho phép sử dụng các số nguyên. ('is_integer' không được định nghĩa cho số nguyên) –

+0

Đồng ý. Cảm ơn bạn. –

Các vấn đề liên quan