J'ai une zone de texte acceptant l'entrée de l'utilisateur; Je suis en train d'utiliser cette entrée utilisateur pour remplir ce membre d'un de mes objets métier:ASP.NET - Conversion du numéro localisé
public System.Decimal? ExchangeRate
L'application est localisée - Je dois soutenir les cultures même temps, qui acceptent ces comme entrées valides: « 1 , 5" et "1,5"
le code que j'ai maintenant:
var culture = Thread.CurrentThread.CurrentUICulture; int exchangeRate; int.TryParse(txtExchangeRate.Text, NumberStyles.Number, culture, out exchangeRate); entity.ExchangeRate = exchangeRate;
Lorsque la culture de l'utilisateur est défini sur une culture qui attend le "format 1,5" (la virgule comme séparateur décimal) - par exemple "ro-RO", je veux que la valeur qui est stockée dans entity.ExchangeRate soit 1.5; Toutefois, lors de l'exécution du code ci-dessus, il est converti en 15 à la place.
Des suggestions sur la façon de convertir ces différents formats afin que les données qui sont stockées dans mon entité commerciale soient "1.5" (point comme séparateur décimal)?
Merci.
gars vous aviez raison - il était logique d'utiliser Thread.CurrentThread.CurrentCulture au lieu de Thread.CurrentThread.CurrentUICulture et decimal.TryParse au lieu de int.TryParse.
Mais ces changements ne résoudraient toujours pas mon problème. Et après avoir joué avec le code un peu plus, je peux maintenant simplifier le problème à ceci:
J'utilise un contrôle telerik RadNumericTextBox qui oblige les utilisateurs à utiliser le format correct en fonction de leur culture. Ainsi, lorsque Thread.CurrentThread.CurrentCulture est défini sur "ro-RO", il n'accepte que le format "1,5" et lorsqu'il est défini sur "en-GB", il n'accepte que le format "1.5".
Voici le code que je suis maintenant en utilisant:
decimal exchangeRate; decimal.TryParse(txtExchangeRate.Text, out exchangeRate); entity.ExchangeRate = exchangeRate;
Cas 1: la culture actuelle est "en-GB" - entrée est acceptée "1,5", ExchangeRate est réglé sur 1,5 - tout fonctionne bien. Cas 2: la culture actuelle est "ro-RO" - entrée acceptée est "1,5", mais après l'exécution de la ligne decimal.TryParse ..., exchangeRate est fixé à 15 - faux, évidemment. Je devrais également mentionner que dans ce cas, la valeur de txtExchangeRate.Text est également montrée comme "1.5" dans ma fenêtre de surveillance. Donc, il ressemble à decimal.TryParse prendra en considération la culture actuelle, mais je ne peux pas trouver un moyen de le faire fonctionner correctement pour moi. Aucune suggestion?
Vous ne devriez pas utiliser decimal et decimal.TryParse? Il devrait revenir en tant que 1, pas 15 lorsque vous analyser comme un int puisque la partie décimale serait tronquée. – tvanfosson
@tvanfosson: Cela devrait être une réponse – cjk