Convertit une chaîne au format décimal
J'ai besoin de convertir une Chaîne en un nombre décimal en C#, mais cette chaîne ont des formats différents.
Par exemple:
"50085"
"500,85"
"500.85"
Cela devrait se convertir pour 500,85 en décimal. Est une forme simplifiée de faire cette convertion à l'aide de format?
- Virgule ne pas stocker dans le format de "500,85". Demandez-vous une paire de Décimales?
- Eh bien, il pourrait, selon votre culture/paramètres régionaux. Tout le monde ne représente les valeurs décimales de la même façon. Dans cet exemple,
500,85
pourraient être équivalentes à500.85
. - Pourrait
50.865,85
être une possibilité dans votre chaîne ?
Vous devez vous connecter pour publier un commentaire.
Tout en décimal.Parse() est la méthode que vous cherchez, vous aurez à fournir un peu plus d'informations. Il ne sera pas automatiquement de choisir entre les 3 formats de vous donner, vous aurez à dire le format qui vous attend (sous la forme d'un IFormatProvider). Notez que même avec un IFormatProvider, je ne pense pas que "50085" sera bien tiré.
La seule chose cohérente je vois, c'est qu'il apparaît à partir de vos exemples que vous avez toujours s'attendre à deux décimales de précision. Si c'est le cas, vous pouvez éliminer tous les délais et les virgules, puis diviser par 100.
Peut-être quelque chose comme:
Certaines cultures, utilisez une virgule pour indiquer la virgule flottante. Vous pouvez tester avec le code suivant sur une page aspx:
Cela donne la réponse 501 lorsque le thread de la culture a été définie à une culture qui utilise la virgule pour virgule flottante. Vous pouvez forcer cette manière:
Cela va fonctionner, en fonction de vos paramètres de culture:
Si votre culture n'est pas, par défaut, de permettre
,
au lieu de.
comme un point décimal, vous aurez probablement besoin de:Mais aura besoin de vérifier plusieurs
.
s '... ce qui semble se résument à un problème d'entrée d'assainissement. Si vous êtes en mesure de le valider et de le désinfecter l'entrée à tous conformes à un ensemble de règles, la conversion en décimal sera beaucoup plus facile.50.865,85
Essayer ce code ci-dessous:
Depuis que je suis en donnant une valeur de 500,85, je vais supposer que la culture est française, et donc le séparateur décimal est le "
,
". Puis décimal.TryParse(numValue, Système.De la mondialisation.NumberStyles.Nombre, culInfo.NumberFormat,hors decValue);renvoie la valeur que 500.85 dans decValue. De même, si l'utilisateur est en anglais alors changer le culInfo constructeur.
Il existe de nombreuses façons:
System.Convert.ToDecimal("232.23")
Double.Parse("232.23")
double test;
Double.TryParse("232.23", out test)
Assurez-vous d'essayer et attraper...
C'est une nouvelle fonctionnalité appelée Symbole de Groupement des Chiffres.
Suit:
Changer une virgule; remplacer avec (n'importe quel caractère de A à Z ou {/,}).
Symbole de Groupement des chiffres=e;
Exemple:
Essayer Cette