71 votes

Conversion d'un double en chaîne de caractères avec N décimales, un point comme séparateur de décimales et aucun séparateur de milliers.

Je dois convertir une décimale en une chaîne de caractères avec N décimales (deux ou quatre) et PAS de séparateur de milliers :

XXXXXXX (point) DDDDD".

Le problème avec CultureInfo.InvariantCulture c'est que l'on place ',' pour séparer les milliers.

UPDATE

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


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

145voto

Guffa Points 308133

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

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

El long est un nombre entier, il n'y a donc pas de partie fractionnée. Vous pouvez simplement le formater en une chaîne de caractères et ajouter des zéros par la suite :

value.ToString() + ".00"

0 votes

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

0 votes

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

1 votes

@Captain Comic : Vous obtenez le séparateur de milliers 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, son séparateur décimal est utilisé, qui est un point.

51voto

Pedro Santos Points 471

Il est très facile de spécifier votre propre séparateur décimal. Il m'a fallu environ 2 heures pour le comprendre :D. Vous voyez que vous utilisez la culture actuelle ou une autre culture 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 selon le format de votre culture actuelle NumberDecimalSeparator . Ce que j'ai fait, c'est de créer une nouvelle instance de l'élément NumberFormatInfo et définir son NumberDecimalSeparator à n'importe quelle 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"

5voto

Mahi Uddin Points 539

Vous pouvez utiliser

value.ToString(CultureInfo.InvariantCulture)

pour obtenir une valeur double exacte sans mettre de précision.

0 votes

Vous devez faire attention à cela car si le programme est exécuté sur un programme avec une culture différente, cela peut entraîner des problèmes si vous n'avez pas défini la zone.

3voto

Makah Points 1056

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

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

Sortie : 10,000.30

1 votes

Cela posera des problèmes. Si vous remplacez votre symbole décimal par une virgule, cela donnera comme résultat 100,000,30 . En effet, le constructeur de CultureInfo que vous utilisez respectera les paramètres de l'utilisateur tels que le symbole décimal. Une manière plus sûre est d'utiliser CultureInfo.Invariant, ou vous pouvez le construire comme ceci : new CultureInfo("en-US", false) En passant false au constructeur, on lui demande de ne pas respecter les personnalisations de l'utilisateur.

-3voto

Manuel Points 88

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

Voici une description détaillée de Chaînes de format numérique

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X