Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memformat Berganda dengan Tepat dalam C# untuk Memadankan Ketepatan Yang Ditentukan?

Bagaimanakah Saya Boleh Memformat Berganda dengan Tepat dalam C# untuk Memadankan Ketepatan Yang Ditentukan?

Barbara Streisand
Barbara Streisandasal
2025-01-04 11:40:341008semak imbas

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

Memformat Beregu untuk Output dalam C

Dalam C#, kelakuan lalai untuk memformat beregu ialah untuk membundarkan nilai kepada 15 digit perpuluhan bererti sebelum menggunakan ketepatan yang ditentukan. Ini boleh membawa kepada hasil yang tidak dijangka, terutamanya apabila berurusan dengan nilai yang mempunyai perbezaan kecil dalam ketepatan.

Untuk memformat penggandaan dengan tepat dan memastikan ketepatan yang diminta dihormati, seseorang boleh menggunakan kelas DoubleConverter yang disediakan oleh Jon Skeet. Kaedah ToExactString() dalam kelas ini mengembalikan nilai perpuluhan tepat bagi dua kali ganda. Untuk memasukkan pembundaran kepada ketepatan yang ditentukan, kaedah boleh diubah suai seperti berikut:

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;
    }
}

Menggunakan kaedah yang diubah suai ini, kod berikut akan menghasilkan output yang sepadan dengan ketepatan yang dinyatakan dalam penentu format:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memformat Berganda dengan Tepat dalam C# untuk Memadankan Ketepatan Yang Ditentukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn