2013-05-09 4 views
3

J'ai cette valeur double:string.format (format, doubleValue), la précision perdue

var value = 52.30298270000003 

et quand je le convertir en string, il perd de sa précision :

var str = string.Format("{0} some text...", value); 
Console.WriteLine(str); // output: 52.3029827 

Les nombre de précision sur ma valeur double peut être modifié au moment de l'exécution. Comment puis-je forcer la méthode string.Format pour utiliser tous les précision?

Répondre

6

Vous voulez utiliser le spécificateur de format R

De l'MSDN

Résultat: une chaîne qui peut aller-retour à un nombre identique.

Pris en charge par: Single, Double et BigInteger.

Spécificateur de précision: Ignoré.

Plus d'informations: The Round-trip ("R") Format Specifier.

String.Format("{0:R} some text...", value) 

vous donnera

52.30298270000003 some text... 
+0

Ah, j'ai besoin de plus de pratique sur stackoverflow, les gars sont rapides :)! De bonnes choses, mec. –

3

Essayez ceci:

var value = 52.30298270000003; 

var str = string.Format("{0} some text...", value.ToString("R")); 
Console.WriteLine(str); // output: 52.3029827 

Le documnetation MSDN a ceci à dire au sujet de la méthode ToString de simple et de double et en utilisant ToString("R"):

Par défaut, la valeur de retour contient uniquement 7 chiffres de précision bien qu'un maximum de 9 chiffres soit géré en interne. Si la valeur de cette instance comporte plus de 7 chiffres, ToString (String) renvoie PositiveInfinitySymbol ou NegativeInfinitySymbol au lieu du nombre attendu . Si vous avez besoin de plus de précision, spécifiez le format avec la spécification de format "G9", qui renvoie toujours 9 chiffres de précision , ou "R", qui renvoie 7 chiffres si le numéro peut être représenté avec cette précision ou 9 chiffres si le nombre ne peut être représenté avec une précision maximale.

+1

Comment un double peut-il être un single? – leppie

+0

Que voulez-vous dire exactement quand vous dites "un double est fondamentalement un single"? – LukeH

+0

Désolé, je voulais dire float et single, et ensuite changé en double: | Réponse éditée pour ne pas être si confuse. – Maloric

Questions connexes