2009-06-11 32 views

Trả lời

5

Tôi không nghĩ rằng có một định dạng được xác định trước cho định dạng này trong python được kế thừa từ C và tôi chắc chắn bạn không có định dạng mong muốn trong C.

Bây giờ, trong python 3, bạn có định dạng chức năng đặc biệt, nơi bạn có thể tự định dạng. Loại bỏ các số 0 cuối cùng trong python rất dễ dàng: chỉ cần sử dụng phương thức strip:

a = 1.23040000 
print str(a).rstrip('0') 

Nếu bạn muốn giữ 0 sau dấu thập phân thì cũng không quá khó.

+0

Ok, tuyệt vời! Bây giờ tôi chỉ phải đối phó với tình huống 1.000000 -> 1.0 một cách riêng biệt, bất kỳ cách nào ngắn để làm điều đó, tức là kiểm tra nếu chỉ có số không sau "."? – zequzd

+4

Tôi sẽ đi cho câu trả lời đơn giản: phát hiện nếu ký tự cuối cùng là một điểm, và thêm một 0 nếu đó là trường hợp. Hãy nhớ rằng điều này sẽ không hoạt động theo nội địa hóa (ví dụ như trong ngôn ngữ mẹ đẻ của tôi, tiếng Pháp, chúng tôi sử dụng ',' cho dấu thập phân và '.' Cho nghìn dấu tách). –

1

Nhà điều hành '%2.2f' sẽ chỉ làm cùng một số thập phân bất kể có bao nhiêu chữ số đáng kể số lượng có. Bạn sẽ phải xác định điều này trong số và tự định dạng định dạng. Bạn có thể cắt ngắn điều này bằng cách in tới một chuỗi có số lượng chữ số thập phân lớn và loại bỏ tất cả các số không theo sau.

Một chức năng tầm thường để làm điều này có thể trông giống như intel_format() trong mẫu dưới đây:

import re 

foo_string = '%.10f' % (1.33333) 
bar_string = '%.10f' % (1) 

print 'Raw Output' 
print foo_string 
print bar_string 

print 'Strip trailing zeros' 
print re.split ('0+$', foo_string)[0] 
print re.split ('0+$', bar_string)[0] 

print 'Intelligently strip trailing zeros' 
def intel_format (nn): 
    formatted = '%.10f' % (nn) 
    stripped = re.split('0+$', formatted) 
    if stripped[0][-1] == '.': 
     return stripped[0] + '0' 
    else: 
     return stripped[0] 

print intel_format (1.3333) 
print intel_format (1.0) 

Khi chạy, bạn sẽ có được kết quả này:

Raw Output 
1.3333300000 
1.0000000000 
Strip trailing zeros 
1.33333 
1. 
Intelligently strip trailing zeros 
1.3333 
1.0 
+0

Cảm ơn bạn! Tôi cũng đã đưa ra thử nghiệm nếu float_variable% 1 == 0, để làm điều này. – zequzd

9

Cách sử dụng mô-đun thập phân?

Từ documentation:...

"Các module thập phân kết hợp một khái niệm về những nơi quan trọng để 1.30 + 1.20 là 2.50 trailing không được giữ để chỉ ra ý nghĩa Đây là phần trình bày thông cho các ứng dụng tiền tệ Đối với nhân , các “sách giáo khoa” cách tiếp cận sử dụng tất cả các số liệu trong multiplicands Ví dụ, 1,3 * 1,2 cho 1,56 trong khi 1.30 * 1.20 cho 1,5600 "

chức năng normalize() loại bỏ số không đuôi:..

>>> from decimal import * 
>>> d1 = Decimal("1.30") 
>>> d2 = Decimal("1.20") 
>>> d3 
Decimal("1.5600") 
>>> d3.normalize() 
Decimal("1.56") 
+0

Có, điều này cũng có thể.Tuy nhiên, chương trình tôi phải viết là có nghĩa là khoa học tự nhiên hoặc không liên quan gì đến ý nghĩa, nó là một bài tập tầm thường, nhưng bây giờ nó hoạt động. Cảm ơn bạn! – zequzd

-2
def float_remove_zeros(input_val): 
    """ 
    Remove the last zeros after the decimal point: 
    * 34.020 -> 34.02 
    * 34.000 -> 34 
    * 0 -> 0 
    * 0.0 -> 0 
    """ 
    stripped = input_val 
    if input_val != 0: 
     stripped = str(input_val).rstrip('0').rstrip('.') 
    else: 
     stripped = 0 
    return stripped 
+0

-1: Từ câu hỏi: khi phao là 104.06250000 chương trình nên in 104.0625 ... 119.00000 hoặc 72.000000 ... nên ... [là] 119.0 và 72.0.

4

Tôi nghĩ cách đơn giản nhất sẽ là chức năng "tròn". trong trường hợp của bạn:

>>> round(104.06250000,4) 
104.0625 
0

Bạn có thể sử dụng định dạng phương thức chuỗi nếu bạn đang sử dụng Python 2.6 trở lên.

>>> print "{0}".format(1.0) 
1.0 
>>> print "{0}".format(1.01) 
1.01 
>>> print "{0}".format(float(1)) 
1.0 
>>> print "{0}".format(1.010000) 
1.01 
Các vấn đề liên quan