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
Libérer: 2025-01-04 11:40:34
original
1053 Les gens l'ont consulté

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;
    }
}
Copier après la connexion

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
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal