2013-02-25 14 views
5

Chcę przetworzyć wartość double na string. Chcę, aby mój numer miał określoną liczbę cyfr (o których nie będę wiedział do czasu wykonania). Jeśli ta liczba może być wyrażona z niezerową wartością liczby cyfr, to właśnie tego chcę. Jeśli liczba wychodzi jak zero, chcę ją wyrazić w notacji naukowej.Używaj notacji naukowej tylko w razie potrzeby.

Niektóre przykłady to bardziej jasne, to zakłada Chciałem 3 cyfry:

Wartość: 0,2367 wyjściowa: "0,23"

Wartość: 0,00367 wyjściowa: "3.67E-3"

Wartość: 22,3 wyjściowa: „22.3”

Wartość: 3364,0 wyjściowa: „3.36E3”

Moja praca wokół rozwiązanie byłoby użyć metody ToString() i Nnumeric format string a jeśli to skutkuje zera powrócić do tekstu formatu E, ale wydaje się, jakby to było ponowne wynalezienie koła. Czy ktoś wie, czy wbudowana metoda to zrobić?

+2

nie chcesz 2.37E-1 dla pierwszej z nich? –

+0

Właściwie, wolałbym używać tylko zapisu naukowego, jeśli wszystkie wartości były równe 0, ale w każdym razie wystarczyłoby. – Fr33dan

Odpowiedz

14

Czy spojrzałeś na używanie General Number Format Specifier?

Ogólny („G”) w formacie specifier przekształca liczbę do najbardziej Compact którejkolwiek ze stałym punktem lub notacji naukowej, w zależności od rodzaju i liczby czy precyzja specifier jest obecny.

Niektóre próbki z dokumentacją:

double number; 

number = .0023; 
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)); 
// Displays 0.0023 

number = 1234; 
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture)); 
// Displays 1.2E+03 

number = Math.PI; 
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture)); 
// Displays 3.1416 
+0

Nie wiem, jak udało mi się to pominąć w dokumentacji. – Fr33dan

Powiązane problemy