2009-10-15 43 views
6

Tôi có một mảng trong python có chứa một tập hợp các giá trị, một số trong số đó làchuyển đổi mũ để thập phân trong python

2.32313e + 07

2.1155e + 07

1.923e + 07

112,32

làm thế nào để chuyển đổi định dạng số mũ theo định dạng thập phân

Bổ sung: Có cách nào tôi có thể chuyển đổi số mũ trực tiếp thành số thập phân khi in ra trong UNIX với awk không?

+0

bạn có muốn chuyển đổi thành chuỗi đại diện cho phao có độ chính xác nhất định không? – SilentGhost

+0

có. Và độ chính xác có thể là bất kỳ số nào – randomThought

+0

* bất kỳ số nào * nghĩa là gì? bạn có biết số này không – SilentGhost

Trả lời

5

Tôi tưởng tượng bạn có một danh sách chứ không phải là một mảng, nhưng ở đây nó không tạo ra nhiều sự khác biệt; trong phiên bản 2.6 và phiên bản cũ hơn của Python, chẳng hạn như:

>>> L = [2.32313e+07, 2.1155e+07, 1.923e+07, 11856, 112.32] 
>>> for x in L: print '%f' % x 
... 
23231300.000000 
21155000.000000 
19230000.000000 
11856.000000 
112.320000 

và trong 2.6 hoặc sau đó, phương pháp .format. Tôi tưởng tượng bạn biết rằng các con số trên mỗi con số, không phải là bất kỳ "định dạng" nào - đó là các chuỗi bạn có được bằng cách định dạng các con số, ví dụ: cho đầu ra, có định dạng nào đó. BTW, các biến thể trên đó %f có thể cho phép bạn kiểm soát số thập phân, chiều rộng, căn chỉnh, v.v. - khó đề xuất chính xác những gì bạn có thể muốn mà không có thông số kỹ thuật khác từ bạn.

Khi bị lúng túng, bạn có thể sử dụng printf.

1

Bạn có thể sử dụng locale.format() để định dạng số của bạn cho đầu ra. Điều này có lợi ích bổ sung là phù hợp với bất kỳ quy ước cụ thể về ngôn ngữ nào có thể được mong đợi trong việc trình bày các con số. Nếu bạn muốn kiểm soát hoàn toàn tại vị trí cụ thể nơi bạn thực hiện kết quả đầu ra, bạn nên làm tốt hơn với định dạng "in"% vars ...variant.

Ví dụ:

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, "") 
'C/UTF-8/C/C/C/C' 
>>> locale.format("%f", 2.32313e+07, 1) 
'23231300.000000' 
0

Trong câu trả lời cho phần cuối của câu hỏi của bạn, awk có thể sử dụng cùng một định dạng printf:

awk '{printf "%f\n",$1}' exponential_file 

đâu exponential_file chứa:

2.32313e+07 
2.1155e+07 
1.923e+07 
11856 
112.32 

Bạn có thể thực hiện chuyển đổi thành biến để sử dụng sau này. Dưới đây là một ví dụ đơn giản:

awk '{n = sprintf("%f\n",$1); print n * 2}' exponential_file 
Các vấn đề liên quan