2010-09-21 20 views
12

In C# ist es möglich, ToString auf einem Float durchzuführen und den Wert ohne Verwendung von Exponentials erhalten?Wie erhalten Sie Floats-Wert ohne Exponentialschreibweise

Betrachten wir zum Beispiel die folgenden:

float dummy; 

dummy = 0.000006F; 

Console.WriteLine(dummy.ToString()); 

Dies gibt dem Ausgang

6E-06 

Was ich jedoch ist war

0.000006 

Der nächstgelegene ich das wurde mit finden konnten, "F" Qualifier, aber ich muss dann die Anzahl der Dezimalstellen angeben, ansonsten wird der Wert gerundet.

Gibt es tatsächlich eine Möglichkeit, dies automatisch zu tun, oder muss ich eine Menge funky Logik tun, um entweder Nullen zu trimmen oder die Anzahl der benötigten Dezimalzahlen herauszufinden.

Danke;
Richard Moss

Antwort

16

Versuchen Sie, diese

Console.WriteLine(dummy.ToString("F")); 

Sie können auch Anzahl der Nachkommastellen angeben. Zum Beispiel F5, F3 usw.

Auch können Sie benutzerdefinierte Formatbezeichner

Console.WriteLine(dummy.ToString("0.#########")); 
+0

Ja, wie gesagt habe ich das schon probiert. Allerdings muss ich die Anzahl der Dezimalstellen angeben, die ich nicht unbedingt kennen muss (es sei denn, es gibt noch etwas, was mir fehlt;)) - Ich bin etwas überrascht, dass ich das außer mit der E-Notation nicht zu tun scheint was meine Benutzer nicht wollen. –

+0

Oh, Entschuldigung, ich musste genauer lesen. Wenn Sie also die Gleitkommazahl anzeigen möchten, sollten Sie die maximale Dezimalgenauigkeit deklarieren. Übrigens bietet Float-Typ keine hohe Genauigkeit (~ 10^(- 39)) und Sie können einfach die ausreichend große Anzahl an Dezimalstellen wählen –

+0

Ich hatte das auch versucht, also F10, aber den "Nebeneffekt "war, dass die Nullen nach dem 6.Ich hatte gehofft, das zu vermeiden, aber wenn es der einzige Weg ist, den ich von den Extrazullos abstreifen kann, nehme ich an. Es scheint nur so ... klobig! –

1
Console.WriteLine(dummy.ToString("N5")); 

wobei 5 die Zahl der Dezimalstellen

+0

Danke für die Antwort, dies ist auch etwas, das ich bereits versucht habe und leidet das gleiche Problem wie der F-Qualifier in dem ich explizit eine Präzision angeben muss, die ich nicht kenne. –

2
string dum = string.Format("{0:f99}",dummy).TrimEnd('0'); 
if (dum.EndsWith(",")) dum = dum.Remove(dum.Length - 1); 
2

Ohne eine weitere Hintergrundinformationen überprüfen, ist es schwer zu sagen - aber es klingt wie Sie Dezimal-Semantik wollen. Warum also nicht den Typ decimal verwenden?

decimal dummy; 
dummy = 0.000006M; 

Die dezimale Art ist genauer in Dezimalzahlen darstellen als float oder double, aber es ist nicht so performant. Weitere Informationen finden Sie unter here.

0
float dummy = 0.000006F; 
Console.WriteLine(dummy.ToString("0." + new string('#', 60))); 

Wenn Sie eine Menge tun, werden diese dann macht es Sinn, in eines das Format-String zu speichern static Feld/Objekt irgendwo und wieder zu verwenden, anstatt ein neues string jedes Mal Konstruktion:

private static readonly string _allFloatDigits = "0." + new string('#', 60); 

// ... 

float dummy = 0.000006F; 
Console.WriteLine(dummy.ToString(_allFloatDigits)); 
Verwandte Themen