Kann jemand mir bitte erklären, was hier passiert:C# float Präzision
using System;
using System.Text;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
object o = 1000000.123f;
float f= Convert.ToSingle(o);
double d = Convert.ToDouble(f);
Console.WriteLine(f.ToString("r"));
Console.WriteLine(d.ToString("r"));
Console.ReadLine();
}
}
}
Welche Ausgänge:
1000000,13
1000000,125
ich erwartet hatte:
Das Objekt o einen zugrunde liegenden Float-Typ zu haben (scheint zu passieren [durch Beobachten der Uhr w indow, wo es als Objekt {float} eingegeben wird)
Das 1000000.123f in f als 1.000.000,125 erhalten gespeichert würden (Die IEEE754 Annäherung in 32 Bit?)
Dass die Doppel 1.000.000,125 als auch speichern würde (scheint zu passieren, auch wenn f scheint nicht das zu enthalten, was ich erwartet habe)
Die Frage nach einem Round-Trip-Format auf der ToString würde mir 1000000.125 in beiden Fällen zurückgeben.
Kann mir jemand sagen, was ich falsch mache, um 1000000.13 zu bekommen, wenn Sie f herausziehen?
danke für die antwort (und die heads up re: meine umwandlung nop). Hat der float.ToString() die Zahl jedoch nicht gerundet? Würde eine Kürzung nicht in 1000000.12 resultieren? –
@StephenEmm: Wenn es auf halbem Weg zwischen zwei Darstellungen steht, rundet es auf (oder weg von Null - nicht sicher, was - aber es macht keinen Unterschied für positive Zahlen). –