2009-11-01 8 views
2

J'ai remarqué que mes doubles contiennent différents caractères de précision en fonction des paramètres régionaux.Comment faire des doubles contiennent toujours un. personnage?

Par exemple:

3,47 ou 3.45

Comment puis-je appliquer la double doit toujours contenir un caractère de précision .?

problème est une fois que je sérialiser la classe contenant ce double XML, il se livré à d'autres systèmes qui attendent un résultat standard. Donc, après avoir lu vos réponses (et merci), est-ce que vous avez recommandé de changer la propriété en une chaîne, (faisant les remplacements dans une chaîne), de sorte qu'elle sérialise avec la valeur de chaîne (pas le double)?

+1

Sur votre dernier commentaire supplémentaire:? Ne pas utiliser le remplacement sur la corde (quid du séparateur des milliers ou des nombres non-flotteur se terminant par une grammaire par des virgules Vous aurez en plus du mal à faire plus tard dans la chaing, il suffit d'utiliser 'InvariantCulture' le moment vous transformez une chaîne, ou un ensemble' Application.CurrentCulture' de ne pas dérange pas du tout. – Abel

Répondre

15

Vous devez mettre la double à l'aide de la chaîne Culture Invariant.

double d = 3.47; 
Console.WriteLine(d.ToString(CultureInfo.InvariantCulture)); 
2

Le double lui-même ne comprend pas « » ou un ",", seulement l'impression de la représentation fait. Vous pouvez lire sur les formats personnalisés here.

[Mise à jour selon OP]
Je ne sais pas exactement ce que votre conception ressemble, mais il serait probablement intelligent pour créer une propriété de chaîne sur votre DTO, qui génèrerait la chaîne formatée de votre double, et puis marquez votre double propriété comme n'étant pas sérialisable.

0

Lorsque vous avez besoin de faire cela pour tous les numéros dans votre applicaton actuelle, vous pouvez utiliser ce qui suit pour le mettre à l'échelle l'application (nouveaux threads héritant de ce paramètre):

// use this statement to force the default: 
Application.CurrentCulture = CultureInfo.InvariantCulture; 
string s = myNumber.ToString(); 

// for one number you have to remember to use: 
string s = myNumber.ToString(CultureInfo.InvariantCulture); 

Note: par défaut, votre application, qu'elle soit ASP.NET ou WinForms, utilisera les paramètres de culture du système sur lequel elle s'exécute (dans ASP.NET, vous pouvez définir la culture globalement dans le web.config).

Questions connexes