2011-02-01 17 views
16

Mam niektóre wartości zmiennoprzecinkowych Chcę przekonwertować na ciąg znaków, chcę zachować formatowanie takie samo podczas konwersji, tj. 999.0000 (zmiennoprzecinkowe) -> 999.0000 (ciąg). Mój problem polega na tym, że wartości zawierają dowolną liczbę zera po przecinku dziesiętnym, tak jak w poprzednim przykładzie, są usuwane podczas przekształcania na ciąg znaków, więc wynik, z którego ostatecznie powstaje, to 999.Specyfikator formatu Float to String Specyfikator

Szukałem w specyfikatorze formatu dla metody toString() na MSDN, specyfikator RoundTrip ("R") wygląda tak, jakby produkował to, co chcę, ale jest obsługiwany tylko dla zmiennych Single, Double i BigInt. Czy dla zmiennych typu float istnieje specyfikator formatu? A może łatwiej byłoby po prostu przekształcić wartości w debel?

AKTUALIZACJA: Dla jasności, powodem, dla którego chcę zachować końcowe zera, jest to, że dokonuję porównania miejsc dziesiętnych, tj. Porównuję liczbę cyfr po przecinku między dwiema wartościami. Na przykład 1,00 i 1,00000 mają inną liczbę cyfr po przecinku dziesiętnym. Wiem, że to dziwna prośba, to do pracy, a wymaganie przychodzi z wysoka.

UPDATE 3.2.11:

myślałem o tym zbyt mocno, czytam numery z pliku txt, a następnie analizowania ich jako pływaki, mam zamiar zmodyfikować program do sprawdzenia czy wartości ciągu są liczbami dziesiętnymi czy liczbami całkowitymi. Przepraszamy za zmarnowanie twojego czasu, chociaż było to bardzo wnikliwe.

+0

ile cyfr po przecinku?jeśli chcesz zachować tę dynamikę, zakładając, że wartość jest poprawna, przenieś, użyj .ToString ("G") –

+0

Cyfry będą się różnić, aby zachować prostotę, powiedziałbym, że zakres cyfr po przecinku może być gdziekolwiek od 1 do 5. – kingrichard2005

+0

.ToString ("G") jest najlepszy dla zakresu zmiennych –

Odpowiedz

24

Po pierwsze, Etienne says, float C# jestSingle. Jest to po prostu słowo kluczowe C# dla tego typu danych.

Więc na pewno może to zrobić:

float f = 13.5f; 
string s = f.ToString("R"); 

drugie, odniosły kilka razy do "format" liczba jest; liczby nie mają formatów, mają tylko wartości :. Struny mają formaty. Co mnie zastanawia: co to jest, że masz format, ale nie jest ciąg? Najbliższą rzeczą, o której myślę, byłby decimal, który robi zachować swoją własną precyzję; jednak wywołanie po prostu decimal.ToString powinno mieć pożądany efekt.

Co powiesz na przykładowy kod, abyśmy mogli zobaczyć, co dokładnie robisz i dlaczego nie osiąga się tego, czego chcesz?

+2

Szybka uwaga: w dziedzinach naukowych powszechne jest rozróżnienie "1.01e5" i "1.0100e5", ponieważ liczba końcowych zerów przyczynia się do liczby cyfr znaczących, co wyraża dokładność pomiaru. –

4

C#, float jest alias System.Single (trochę jak int jest alias System.Int32).

+6

Haha, "trochę jak" -nice jeden;) –

38

Zastosowanie ToString() z tego formatu:

12345.678901.ToString("0.0000"); // outputs 12345.6789 
12345.0.ToString("0.0000"); // outputs 12345.0000 

umieścić jak najwięcej jak to konieczne zera na końcu formatu.

+0

Hi Aliostad, problem z tym, chcę, aby ciąg był sformatowany dokładnie tak, jak liczba jest sformatowana. Dla twojego drugiego przykładu, chciałbym aby był "12345.0" jako łańcuch, a nie "12345.0000". – kingrichard2005

+0

@ kingrichard2005- jakie informacje mówią, czy liczba zmiennoprzecinkowa wynosi 12345.0 czy 12345.0000? Będą one równoważne jako pływaki. –

+0

Czytam te pliki z pliku txt. Być może lepszym rozwiązaniem byłoby ustalenie, czy liczba odczytana jako ciąg jest liczbą dziesiętną czy nie. – kingrichard2005

Powiązane problemy