2012-03-28 71 views
18

Có thể đặt số chữ số được sử dụng để in số mũ của một số dấu phẩy động không? Tôi muốn đặt nó vào 3.Python - số chữ số trong số mũ

Hiện nay,

f = 0.0000870927939438012 
>>> "%.14e"%f 
'8.70927939438012e-05' 
>>> "%0.14e"%f 
'8.709279e-005' 

Những gì tôi muốn in là: '8.70927939438012e-005'

+2

Tại sao ví dụ thứ hai còn ít chính xác và 3 chữ số trong số mũ? –

+0

Trên máy của tôi "% e"% f đầu ra '8.709279e-05' và "% 0.14e"% f đầu ra '8.70927939438012e-05'. Ngoài ra, có thể có độ chính xác cao hơn với các thư viện như mpmath. Tuy nhiên, tôi không biết liệu nó có phù hợp với nhu cầu của bạn hay không. – aruseni

Trả lời

17

Có một không có cách nào để kiểm soát đó, cách tốt nhất là viết một hàm cho ví dụ này

def eformat(f, prec, exp_digits): 
    s = "%.*e"%(prec, f) 
    mantissa, exp = s.split('e') 
    # add 1 to digits as 1 is taken by sign +/- 
    return "%se%+0*d"%(mantissa, exp_digits+1, int(exp)) 

print eformat(0.0000870927939438012, 14, 3) 
print eformat(1.0000870927939438012e5, 14, 3) 
print eformat(1.1e123, 4, 4) 
print eformat(1.1e-123, 4, 4) 

Output:

8.70927939438012e-005 
1.00008709279394e+005 
1.1000e
1.1000e-
+2

Anurag, có nhiều cách khác nhau để thao tác điều này dưới dạng chuỗi và nhận được ba chữ số trong số mũ. Những gì tôi đã quan tâm là để tránh thao tác chuỗi từ ví dụ thứ hai trong bài viết của tôi cho thấy rằng Python tự nhiên sử dụng ba chữ số trong một số trường hợp. Vẫn không chắc chắn lý do tại sao nó làm như vậy, như bạn cũng đã yêu cầu ở trên. Tôi chỉ tìm thấy nó trong khi thử nghiệm. – nmadzharov

+0

@nmadzharov Tôi không nghĩ rằng có bất kỳ chức năng công cộng cho điều đó, bạn nên thử nhìn vào mã python để xem những gì nó thực sự làm, mặc dù tôi không thấy 3 chữ số trong số mũ trên python 2.7 –

+0

@Anurag: ba số mũ đã xuất hiện trên một số nền tảng cho Python 2.5; điều này đã được sửa trong Python 2.6 (tôi tin). Xem http://bugs.python.org/issue1600 để biết thêm. –

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