In C# besteht das Standardverhalten für die Formatierung von Doubles darin, den Wert auf 15 signifikante Dezimalstellen zu runden, bevor die angegebene Genauigkeit angewendet wird. Dies kann zu unerwarteten Ergebnissen führen, insbesondere wenn es sich um Werte handelt, die einen kleinen Unterschied in der Genauigkeit aufweisen.
Um Doubles genau zu formatieren und sicherzustellen, dass die erforderliche Genauigkeit eingehalten wird, kann man die von Jon Skeet bereitgestellte DoubleConverter-Klasse verwenden. Die ToExactString()-Methode in dieser Klasse gibt den genauen Dezimalwert eines Doubles zurück. Um das Runden auf eine bestimmte Genauigkeit zu integrieren, kann die Methode wie folgt geändert werden:
public static string ToRoundedExactString(double value, int precision) { string exactString = ToExactString(value); int decimalIndex = exactString.IndexOf('.'); if (decimalIndex == -1) { return exactString; } int decimalCount = exactString.Length - (decimalIndex + 1); if (decimalCount > precision) { exactString = exactString.Substring(0, decimalIndex + 1 + precision); double roundedValue = Double.Parse(exactString); return roundedValue.ToString(); } else { return exactString; } }
Mit dieser modifizierten Methode erzeugt der folgende Code die Ausgabe, die der in den Formatbezeichnern angegebenen Genauigkeit entspricht:
double i = 10 * 0.69; Console.WriteLine(DoubleConverter.ToRoundedExactString(i, 20)); Console.WriteLine(DoubleConverter.ToRoundedExactString(6.9 - i, 20)); Console.WriteLine(DoubleConverter.ToRoundedExactString(6.9, 20)); // 6.89999999999999946709 // 0.00000000000000088818 // 6.90000000000000035527
Das obige ist der detaillierte Inhalt vonWie kann ich Doubles in C# genau formatieren, um der angegebenen Genauigkeit zu entsprechen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!