2012-02-21 10 views
5

mam liczb podawanych odpowiednio z FORTRAN programu w następującym formacie:Jak przetwarzać dwukrotnie w formacie naukowym przy użyciu C#

0.12961924D+01 

Jak mogę analizować to jako podwójne przy użyciu C#?

Próbowałem następujących bez powodzenia:

// 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

Myślę, że musisz ręcznie zmienić "D" na "E", a początkowe miejsce na "-", jeśli jest obecne. –

+1

Notacja wykładnicza nie jest czymś, co zostanie rozpoznane przez .NET - używa 'E', gdzie masz' D'. – Oded

Odpowiedz

7

Chciałbym najpierw zrobić kilka manipulacji ten ciąg, aby uzyskać ją od FORTRAN do .NET formatowanie:

  • Przycinaj każdą wiodącą przestrzeń; jeśli istnieje znak ujemny, chcemy go, ale nie chcemy spacji.
  • Zamień "D" na "E".

Poniższa powinien dostać to, czego potrzebujesz:

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

Wierzę, że pole wiodące wskazuje na liczbę dodatnią; innymi słowy, "użycie spacji do wskazania liczb ujemnych w razie potrzeby" oznacza, że ​​w przypadku liczb ujemnych pojawi się "-'" zamiast spacji. – phoog

+0

ah. Bardzo logiczne. Edytowanie ... – KeithS

+0

Pięknie przepracowane. Uważam to za ograniczenie C#, że nie zaakceptuje "D", ale twoje rozwiązanie działa idealnie - dziękuje Andrew. –

1

to powinno pomóc: s = s.Replace(' ', '-').Replace('D', 'E');

+0

Spacja nie wskazuje liczby ujemnej, w razie potrzeby jest tylko znakiem zastępczym dla znaku ujemnego ... – user7116

1

Ponieważ wszyscy sugeruje zastąpienie miejsca ze znakiem minus, co wydaje się szalony, będę zaoferować ten nieco prostsze rozwiązanie:

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

Tak, to działa również - dziękuję –

Powiązane problemy