2017-02-27 22 views
8

Trong Python, làm cách nào để in một số có thể là số nguyên hoặc loại thực, khi trường hợp thứ hai yêu cầu tôi giới hạn bản in của tôi thành một số chữ số nhất định?In số nguyên hoặc phao bằng số thập phân

câu chuyện dài ngắn, nói rằng chúng ta có ví dụ sau:

print("{0:.3f}".format(num)) # I cannot do print("{}".format(num)) 
          # because I don't want all the decimals 

Có cách nào "Pythy" để đảm bảo ví dụ trong trường hợp num == 1 mà tôi in 1 thay vì 1.000 (tôi muốn nói khác hơn là làm lộn xộn mã của tôi với if báo cáo)

+0

Một phần của vấn đề là 'xử lý' int' .3' cách tương tự như 'float', thay vì nói, bỏ qua nó hoàn toàn. –

+0

Đoán của tôi sẽ là không, bạn sẽ cần ít nhất làm một nhà điều hành bậc ba ở đâu đó trên đường đi, và tôi khá chắc chắn bạn đếm đó là một 'if'. –

Trả lời

10

Với Python 3 *, bạn chỉ có thể sử dụng round() vì ngoài việc làm tròn float s, khi áp dụng cho một số nguyên nó sẽ luôn luôn trả về một int:

>>> num = 1.2345 
>>> round(num,3) 
1.234 
>>> num = 1 
>>> round(num,3) 
1 

hành vi này được ghi chép lại trong help(float.__round__):

Help on method_descriptor: 

__round__(...) 
    Return the Integral closest to x, rounding half toward even. 
    When an argument is passed, work like built-in round(x, ndigits). 

help(int.__round__):

Help on method_descriptor: 

__round__(...) 
    Rounding an Integral returns itself. 
    Rounding with an ndigits argument also returns an integer. 

* Với Python 2, round() luôn return là một float.

+1

Tôi không bao giờ biết 'vòng tròn' rất đa năng. Nó sẽ không bao giờ xảy ra với tôi để sử dụng nó trên một 'int'. –

+0

Không chắc chắn nếu nó quan trọng, nhưng điều này sẽ không cung cấp cho đầu ra tương tự như thông số định dạng trong câu hỏi có giá trị float ngắn hơn (tức là '1.2' so với' 1.200'). – ekhumoro

+0

@ekhumoro Có, tôi đồng ý không rõ hành vi mong muốn ở đó là gì, tôi đã bỏ phiếu cho giải pháp của bạn –

1

Nếu bạn sử dụng một số sửa chữa của dấu chấm động, bạn chỉ có thể sử dụng một thay thế để loại bỏ các phụ 0. Ví dụ này sẽ làm các trick:

print("{:.3f}".format(1).replace(".000", "")) 
+0

Hoạt động tốt trừ khi yêu cầu hiển thị '1.0' là' 1.000'. –

4

Nếu bạn cần phải duy trì một chiều cố định cho các giá trị float, bạn có thể sử dụng printf-style formatting, như thế này:

>>> num = 1 
>>> print('%0.*f' % (isinstance(num, float) * 3, num)) 
1 
>>> num = 1.2345 
>>> print('%0.*f' % (isinstance(num, float) * 3, num)) 
1.234 
>>> num = 1.2 
>>> print('%0.*f' % (isinstance(num, float) * 3, num)) 
1.200 
Các vấn đề liên quan