Tut ToString("F") verlieren Präzision relativ zu ToString("G")?
Ich bin Programmierung in C# mit .Net 3.5, die versuchen zu kontrollieren, das format, in dem floats ausgegeben werden als strings.
Aber ich sehe einige unerwartete Verhalten. Wenn mein code enthält (Beispiel):
float-Wert = 50.8836975;
Bearbeiten Sorry, dass (gelöscht) code "Probe" war wenig hilfreich. Im Grunde war meine Frage, versuchen, Sie zu erklären, die Ergebnisse meiner debugging-Anweisungen unten, wenn ich einen Haltepunkt nach dem "Wert" - ein C# float - zugewiesen waren das Ergebnis einer Berechnung. Jon Skeet's Antwort ist genau das was ich gebraucht habe (seine erste line bringt mich zur Aufgabe für die nutzlosen code).
Dann sehe ich folgende Ergebnisse, wenn ich versuche, die verschiedenen Optionen in meinem Unmittelbaren Fenster:
?value
50.8836975
?value.ToString("G9")
"50.8836975"
?value.ToString("F9")
"50.883700000"
Kann mir jemand erklären, warum meine F9-formatierte Wert verloren zu haben scheint 3 Ziffern der Präzision?
50.8836975.ToString("F9")
->50.883697500
für mich (beachten Sie, dass der Wert einerdouble
, nicht einfloat
).- Der code wird nicht kompilieren, mit zu beginnen - die Sie gegeben haben ein
double
wörtlich und versucht, weisen Sie es einemfloat
variable. Welche ist es? - OK, dann werde ich rein komme. Mein code gar nicht enthalten, die Zeile Wert=50.8836975. Allerdings war der angezeigte Wert in meinem debugger für das schwimmen (ja, wirklich!) variabel, wenn ich traf mein Haltepunkt. Also ich werde zu verschieben, dass man zu Visual Studio.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage ist unklar, weil Sie gegeben haben einen realen Wert ohne
f
suffix, und versucht, weisen Sie es einemfloat
variable. Wenn man eigentlich mitfloat
variable, dann ist die genaue Wert istWenn man eigentlich mit
double
variable, dann der exakte Wert ist:Bekomme ich die gleichen Ergebnisse wie Sie für F9 wenn Verwendung eines
float
, aber nicht, wenn Sie einedouble
.Den Grund für die reduzierte Genauigkeit, enthüllt die Dokumentation für
System.Single
(float
):Ich glaube
F
ist die korrekte Anzeige alle real Ziffern für die Genauigkeit, in einem Versuch zu verhindern, dass Sie glauben, dass Sie tatsächlich bekommen habe mehr Informationen als Sie haben.