2017-07-03 5 views
0

Comment puis-je forcer l'application C# à utiliser. pour séparateur décimal et ignorer les paramètres de culture dans le serveur. J'ai ce problème avec double.ToString et double.parse Je devrais changer le réglage au niveau de l'application en raison de l'ampleur de l'application.CultureInfo et Double.parse et double.toString ne fonctionnent pas correctement

exception occurse en cas comme double.parse ("1/25") et 1,25 ToString

J'Essayez Ce code

string CultureName = Thread.CurrentThread.CurrentCulture.Name; 
     CultureInfo ci = new CultureInfo(CultureName); 
     if (ci.NumberFormat.NumberDecimalSeparator != ".") 
     { 
      // Forcing use of decimal separator for numerical values 
      ci.NumberFormat.NumberDecimalSeparator = "."; 
      Thread.CurrentThread.CurrentCulture = ci; 
     } 

dans app_start commencent la demande et la méthode que le changement de la culture, mais peut » t résoudre le problème

L'application fonctionnait correctement dans .NET 3.5, mais après la mise à niveau vers .NET 4.6.2 problèmes se sont produits sur le serveur 2012 et windows 10.

+0

'double résultat = double.Parse ("1.234", CultureInfo.InvariantCulture)' –

+0

Merci @Dmitry Bychenko Mais je ne peux pas changer chaque double.parse car il a été utilisé 7000 fois et aussi double.ToString soulève l'exception de données de démontage dans notre application. Je devrais fixer au niveau de l'application –

Répondre

0

I défini une méthode et l'utiliser dans tous les Lorsqu'en application qui change cultureinfo

public static void CorrectNumberFormat() 
    { 
     var culture = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name); 
     if (culture.NumberFormat.NumberDecimalSeparator != ".") 
     { 
      culture.NumberFormat.NumberDecimalSeparator = "."; 
      culture.NumberFormat.CurrencyDecimalSeparator = "."; 
      culture.NumberFormat.PercentDecimalSeparator = "."; 
      CultureInfo.DefaultThreadCurrentCulture = culture; 
      CultureInfo.DefaultThreadCurrentUICulture = culture; 

      Thread.CurrentThread.CurrentCulture = culture; 
      Thread.CurrentThread.CurrentUICulture = culture; 
     } 
    } 
2

La voie directe est de préciser le CultureInfo.InvariantCulture:

string source = "1.234"; 

double result = double.Parse(source, CultureInfo.InvariantCulture); 

Le sous-chemin est à assignezCultureInfo.InvariantCulture que la culture actuelle

var saved = Thread.CurrentThread.CurrentCulture; 

try { 
    Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; 

    ... 

    double result = double.Parse(source); 

    ... 
} 
finally { 
    Thread.CurrentThread.CurrentCulture = saved; 
} 

Enfin, vous pouvez modifier la culture actuelle existante (type de fixation "au niveau de l'application"):

CultureInfo modified = CultureInfo.CurrentCulture.Clone() as CultureInfo; 

modified.NumberFormat.NumberDecimalSeparator = "."; 

// Business as usual except the decimal separator which is now dot '.' 
Thread.CurrentThread.CurrentCulture = modified; 

... 

double result = double.Parse(source);