2012-02-21 11 views
5

tôi có số lượng xuất ra từ một chương trình FORTRAN theo định dạng sau:Làm thế nào để phân tích đôi ở định dạng khoa học sử dụng C#

0.12961924D+01 

Làm thế nào tôi có thể phân tích này như một đôi sử dụng C#?

Tôi đã thử những điều sau đây nhưng không thành công:

// note leading space, FORTRAN pads its output so that positive and negative 
// numbers are the same string length 
string s = " 0.12961924D+01"; 
double v1 = Double.Parse(s) 
double v2 = Double.Parse(s, NumberStyles.Float) 
+0

Tôi nghĩ bạn cần phải thay đổi 'D' thành 'E' và không gian dẫn đầu thành '-', nếu có. –

+1

Ký hiệu lũy thừa mà bạn đã đăng không phải là thứ mà .NET sẽ nhận ra - nó sử dụng 'E' trong đó bạn có' D'. – Oded

Trả lời

7

lần đầu tiên tôi sẽ làm một số thao tác của chuỗi này để có được nó từ FORTRAN để NET định dạng:

  • Cắt bất kỳ không gian hàng đầu nào; nếu dấu hiệu tiêu cực là có, chúng tôi muốn nó nhưng chúng tôi không muốn không gian.
  • Thay thế "D" bằng "E".

dưới đây sẽ giúp bạn có những gì bạn cần:

string s = " 0.12961924D+01"; 
s = s.Trim().Replace("D", "E"); 
//s should now look like "0.12961924E01"  
double v2 = Double.Parse(s, NumberStyles.Float); 
+1

Tôi tin rằng không gian dẫn đầu chỉ ra một số dương; nói cách khác, "sử dụng khoảng trắng để biểu thị số âm khi cần" có nghĩa là số âm sẽ có '' -'' chứ không phải là dấu cách. – phoog

+0

ah. Rất hợp lý. Đang chỉnh sửa ... – KeithS

+0

Được làm việc đẹp mắt. Tôi coi đó là một hạn chế của C# mà nó sẽ không chấp nhận 'D', nhưng giải pháp của bạn hoạt động hoàn hảo - cảm ơn Andrew. –

1

Điều này sẽ giúp: s = s.Replace(' ', '-').Replace('D', 'E');

+0

Không gian không biểu thị số âm, nó chỉ là một trình giữ chỗ cho một dấu trừ nếu cần ... – user7116

1

Kể từ khi mọi người khác gợi ý thay thế vào khoảng trống bằng dấu trừ, mà dường như điên, tôi sẽ đưa ra giải pháp này hơi đơn giản:

string input = " 0.12961924D+01"; 
double output = Double.Parse(s.Replace('D', 'E')); 
+0

Có, điều này cũng hoạt động - cảm ơn bạn –