Heim > Backend-Entwicklung > C++ > Wie kann ich Doubles in C# genau formatieren, um der angegebenen Genauigkeit zu entsprechen?

Wie kann ich Doubles in C# genau formatieren, um der angegebenen Genauigkeit zu entsprechen?

Barbara Streisand
Freigeben: 2025-01-04 11:40:34
Original
1037 Leute haben es durchsucht

How Can I Accurately Format Doubles in C# to Match Specified Precision?

Formatieren von Doubles für die Ausgabe in C

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;
    }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage