Maison >développement back-end >C++ >Comment puis-je formater avec précision les doubles en C# pour correspondre à la précision spécifiée ?

Comment puis-je formater avec précision les doubles en C# pour correspondre à la précision spécifiée ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-04 11:40:341036parcourir

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

Formatage des doubles pour la sortie en C

En C#, le comportement par défaut pour le formatage des doubles consiste à arrondir la valeur à 15 chiffres décimaux significatifs avant d'appliquer la précision spécifiée. Cela peut conduire à des résultats inattendus, notamment lorsqu'il s'agit de valeurs qui présentent une petite différence de précision.

Pour formater avec précision les doubles et garantir que la précision demandée est respectée, on peut utiliser la classe DoubleConverter fournie par Jon Skeet. La méthode ToExactString() de cette classe renvoie la valeur décimale exacte d'un double. Pour incorporer l'arrondi à une précision spécifiée, la méthode peut être modifiée comme suit :

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

En utilisant cette méthode modifiée, le code suivant produira la sortie qui correspond à la précision spécifiée dans les spécificateurs de 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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn