2012-11-22 38 views
18

Một cách nhanh chóng không có trí tuệ:Format cắt ngắn Python phao như int trong chuỗi

some_float = 1234.5678 
print '%02d' % some_float # 1234 

some_float = 1234.5678 
print '{WHAT?}'.format(some_float) # I want 1234 here too 

Lưu ý: {:.0f} không phải là một lựa chọn, bởi vì nó vòng (trả 1235 trong ví dụ này).

format(..., int(some_float)) chính xác là điều tôi đang cố gắng tránh, vui lòng không đề xuất điều đó.

+2

@MartijnPieters Có lẽ vì nó tròn thay vì cắt ngắn? Định dạng '" {: .0f} "(1234.5678)' là '" 1235 "', không phải '" 1234 "'. – Blckknght

+1

Điều gì sẽ xảy ra nếu chuyển đổi phao sang 'int()' hoặc cắt bớt nó là các lựa chọn duy nhất? Bước tiếp theo là tạo một lớp con 'float()' tùy chỉnh để tùy chỉnh móc '.__ format __()'. –

+0

Lưu ý rằng trong đoạn mã này: ''% 02d'% some_float' một chuyển đổi ẩn thành' int' đang diễn ra, bạn không thể tránh một số loại chuyển đổi để in theo định dạng mong muốn –

Trả lời

11

Có thể mở rộng tiêu chuẩn ngôn ngữ chuỗi định dạng bằng cách mở rộng các lớp string.Formatter:

class MyFormatter(Formatter): 
    def format_field(self, value, format_spec): 
     if format_spec == 't': # Truncate and render as int 
      return str(int(value)) 
     return super(MyFormatter, self).format_field(value, format_spec) 

MyFormatter().format("{0} {1:t}", "Hello", 4.567) # returns "Hello 4" 
12

này hoạt động:

from math import trunc 
some_float = 1234.5678 

print '{:d}'.format(trunc(some_float)) 
=> 1234 

Hoặc chỉ cần làm điều này, cho rằng vấn đề:

print trunc(some_float) 
=> 1234 

Tôi nghĩ đó là một câu trả lời chấp nhận được, nó tránh được sự chuyển đổi sang int. Lưu ý rằng trong đoạn mã này: '%02d' % some_float chuyển đổi ẩn thành int đang diễn ra, bạn không thể tránh một số loại chuyển đổi để in ở định dạng mong muốn.

-9

này sẽ làm việc quá:

some_float = 1234.5678 
f = lambda x: str(x)[:str(x).find('.')] 
print '{}'.format(f(some_float)) 
=> 1234 

Sau khi thực hiện một% timeit kiểm tra nó trông giống như chức năng trunc từ thư viện toán học nhanh hơn, do đó, math.trunc sẽ được ưu tiên hơn nếu bạn cần định dạng nhiều số theo cách này.

+4

Ugh .. đó là kỹ thuật thực sự tồi – Vlad

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