web-dev-qa-db-fra.com

Conversion double en chaîne avec N décimales, point comme séparateur décimal et sans séparateur de milliers

J'ai besoin de convertir une décimale en une chaîne avec N décimales (deux ou quatre) et NO séparateur de milliers:

"XXXXXXX (point) DDDDD"

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

MISE À JOUR

Cela devrait fonctionner pour les types décimaux et doubles.


Ma question précédente: Besoin de convertir double ou décimal en chaîne

48
Captain Comic

Pour un decimal, utilisez la méthode ToString et spécifiez la culture invariante pour obtenir un point comme séparateur décimal:

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

Le type long est un entier, il n'y a donc pas de partie fraction. Vous pouvez simplement le formater en une chaîne et ajouter des zéros par la suite:

value.ToString() + ".00"
96
Guffa

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, n'est-ce pas? 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 NumberDecimalSeparator de votre culture actuelle. J'ai simplement créé une nouvelle instance de la classe NumberFormatInfo et défini 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"

34
Pedro Santos

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

3
Makah