2010-11-02 4 views
30

je besoin de convertir un nombre décimal en chaîne avec décimales N (deux ou quatre) et NO séparateur de milliers:Conversion double pour chaîne avec décimales N, point comme séparateur décimal, et aucun séparateur des milliers

« XXXXXXX (dot) DDDDD '

Le problème avec CultureInfo.InvariantCulture est que des endroits', 'pour séparer des milliers.

MISE À JOUR

Cela devrait fonctionner pour décimal et double types.


Ma question précédente: Need to convert double or decimal to string

Répondre

71

Pour un decimal, utiliser la méthode ToString, et spécifier la culture Invariant pour obtenir une période comme séparateur décimal:

value.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture) 

Le type long est un nombre entier, il n'y a donc aucune partie de fraction. Vous pouvez simplement mettre en forme dans une chaîne et ajouter quelques zéros après:

value.ToString() + ".00" 
+0

Qu'en est-il du séparateur de milliers? Qu'est-ce qui le contrôle? –

+0

S'il vous plaît dites-moi comment 0.00 est analysé par .NET –

+1

@Captain Comic: Vous obtenez des milliers séparateur lorsque vous utilisez par exemple le format "N2", mais pas avec le format personnalisé "0.00". Le format personnalisé "0.00" signifie "un ou plusieurs chiffres avant le séparateur décimal, le séparateur décimal dépendant de la culture, et exactement deux chiffres après le séparateur décimal". En spécifiant la culture invariante, on utilise le séparateur décimal, qui est une période. – Guffa

-2

Vous pouvez simplement utiliser Decimal.ToString()

Pour deux décimales

myDecimal.ToString("0.00"); 

Pour quatre décimales

myDecimal.ToString("0.0000"); 

Ceci donne le point comme séparateur décimal, et aucun séparateur de milliers indépendamment de la culture.

+12

Non, il donne le séparateur décimal spécifié par la culture, pas toujours la période. – Guffa

+4

Le '.' dans votre chaîne de format est un espace réservé pour le séparateur décimal et pas un littéral' .'. Donc, si, par exemple, votre culture est 'fr-FR' alors le nombre sera affiché comme 1,23 ou 1,2345 etc – LukeH

+0

J'ai essayé de changer le caractère décimal sous les paramètres régionaux dans Windows en virgule, et il imprime toujours dot et pas virgule. Quelle est la raison pour laquelle ça ne change pas, si c'est juste un espace réservé? –

21

Il est vraiment facile de spécifier votre propre séparateur décimal. Il m'a juste fallu environ 2 heures pour le comprendre: D. Vous voyez que vous utilisiez la culture actuelle ou autre que vous spécifiez? Eh bien, la seule chose dont l'analyseur a besoin est un IFormatProvider. Si vous lui donnez le CultureInfo.CurrentCulture.NumberFormat en tant que formateur, il formatera le double en fonction de votre culture actuelle NumberDecimalSeparator. Ce que j'ai fait était simplement de créer une nouvelle instance de la classe NumberFormatInfo et de définir sa propriété NumberDecimalSeparator sur la chaîne de séparation que je voulais. Code complet ci-dessous:

double value = 2.3d; 
NumberFormatInfo nfi = new NumberFormatInfo(); 
nfi.NumberDecimalSeparator = "-"; 
string x = value.ToString(nfi); 

Le résultat? "2-3"

1

Je préfère utiliser ToString() et IFormatProvider.

double value = 100000.3 
Console.WriteLine(value.ToString("0,0.00", new CultureInfo("en-US", false))); 

sortie: 10,000.30

+1

Cela causera des problèmes. Si vous remplacez votre symbole décimal par une virgule, cela affichera ** 100 000,30 **. En effet, le constructeur de CultureInfo que vous utilisez respectera les paramètres utilisateur tels que le symbole décimal. Un moyen plus sûr est d'utiliser soit CultureInfo.Invariant, ou vous pouvez construire comme ceci: 'new CultureInfo (« en-US », false)' Passer false au constructeur dit qu'il ne pas respecter les personnalisations . – Carl

1
double valor=3,14159 
string v = valor.Replace(",","."); 
Console.WriteLine(v); 

sortie: 3.14159

+4

Oui cela fonctionne, non ce n'est pas ce que vous voulez utiliser. Et si vous avez 1000 tartes? valor.Replace (",", "."). Replace (".", ",")? Naah. Si vous utilisez CultureInfo, cela fonctionne toujours et le code reste lisible. – increddibelly

-2

Voici une description détaillée du format numérique des chaînes
https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx

Je pense que vous auriez pu utiliser:
value.ToString ("F" + NumberOfDecimals)

value = 10,502 
value.ToString("F2") //10,50 
value = 10,5 
value.ToString("F2") //10,50 
+2

Le point de la question est que l'auteur a besoin de dot. pas virgule, comme séparateur décimal. – Filip

Questions connexes