web-dev-qa-db-fra.com

Comment changer le symbole du point décimal dans double.ToString ()?

Je voudrais changer le point décimal en un autre caractère en C #. J'ai une variable doublevalue

double value;

et quand j'utilise la commande:

Console.WriteLine(value.ToString()); // output is 1,25

Je sais que je peux le faire:

Console.WriteLine(value.ToString(
    CultureInfo.CreateSpecificCulture("en-GB"))); // output is 1.25

mais je n'aime pas trop ça parce que c'est très long et j'en ai souvent besoin dans mon programme.

Existe-t-il une version plus courte pour définir le "point décimal" vraiment comme un point et non comme une virgule comme cela est courant dans ma culture?

49
Martin Vseticka

Certains raccourci consiste à créer une classe NumberFormatInfo, définissez sa propriété NumberDecimalSeparator sur "." et utilisez la classe comme paramètre de la méthode ToString () chaque fois que vous en avez besoin.

using System.Globalization;

NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ".";

value.ToString(nfi);
106
romanz

Créer une méthode d'extension?

Console.WriteLine(value.ToGBString());

// ...

public static class DoubleExtensions
{
    public static string ToGBString(this double value)
    {
        return value.ToString(CultureInfo.GetCultureInfo("en-GB"));
    }
}
34
LukeH

Je comprends peut-être mal l’intention de votre question, alors corrigez-moi si je me trompe, mais ne pouvez-vous pas appliquer les paramètres de culture globalement une fois et ne vous inquiétez pas de la personnalisation de chaque énoncé?

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
16
womp

Vous pouvez modifier le séparateur décimal en modifiant la culture utilisée pour afficher le nombre. Attention, cela changera tout le reste du nombre (ex. Séparateur de groupement, tailles de groupement, nombre de décimales). D'après votre question, il semblerait que vous utilisiez par défaut une culture utilisant une virgule comme séparateur décimal.

Pour changer seulement le séparateur décimal sans changer de culture, vous pouvez modifier la propriété NumberDecimalSeparator de la culture actuelle NumberFormatInfo .

Thread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";

Cela modifiera la culture actuelle du fil. Toutes les sorties seront maintenant modifiées, ce qui signifie que vous pouvez simplement utiliser value.ToString() pour générer le format souhaité, sans vous soucier de changer de culture à chaque fois que vous produisez un nombre.

(Notez qu'une culture neutre _ ne peut pas avoir son séparateur décimal modifiée.)

14
adrianbanks

Si vous avez une application Web Asp.Net, vous pouvez également la définir dans le web.config afin qu’elle soit identique dans l’ensemble de l’application Web.

<system.web>
    ...
    <globalization 
        requestEncoding="utf-8" 
        responseEncoding="utf-8" 
        culture="en-GB" 
        uiCulture="en-GB" 
        enableClientBasedCulture="false"/>
    ...
</system.web>
1
JP Hellemons
Convert.ToString(value, CultureInfo.InvariantCulture);
0
toree