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 ?
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!