Convertir un string en décimal (C#)

Résolu
Gwendo69 Messages postés 147 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 28 juin 2013 - 16 juin 2009 à 10:51
Gwendo69 Messages postés 147 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 28 juin 2013 - 16 juin 2009 à 16:00
Bonjour,

j'ai un formulaire avec des zones de texte. J'ai besoin de convertir les valeurs inscrites dedans en décimal pour pouvoir les insérer dans ma base de données.
J'ai essayé avec Convert.ToDecimal, rien à faire ça ne marche pas.

Du coup j'ai utilisé "Parse" avec using System.Globalization. Voici le code:

decimal carb = decimal.Parse(txt_Carburant.Text, System.Globalization.CultureInfo.InvariantCulture);
decimal pea = decimal.Parse(txt_Peage.Text, System.Globalization.CultureInfo.InvariantCulture);
decimal loc = decimal.Parse(txt_location.Text, System.Globalization.CultureInfo.InvariantCulture);

//TRAVAIL SUR LA BASE
SqlCommand insert = new SqlCommand("INSERT INTO frais
(carburant,nb_litre,peage_autoroute,km_mois,cout_location,mois,numero_immatriculation)
VALUES ('" + carb + "', '" + txt_NbLitres.Text + "','" + pea + "','" + txt_KmMois.Text + "','" + loc + "','" + cbx_mois.Text + "','" + cbx_NumeroImmat.Text + "')", cnxsql.MyConnection);
insert.ExecuteNonQuery();

Les données s'insèrent bien dans la table, mais la virgule est "oubliée". Quand je met 1,23 j'ai 123 dans la table.

Est-ce que quelqu'un sait pourqoi et si il y a une autre solution? Merci d'avance.

Gwendo.

10 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 51
16 juin 2009 à 15:29
La culture, c'est la différence de format selon les pays.

En France, un nombre à "virgule" s'écrit 12,3. En Angleterre, il s'écrira 12.3.
En France, une on écrit les dates ainsi : 31/12/2009. En Angleterre (pas sûr à 100% de moi) 12-31-2009.

Donc la conversion vers/depuis un string dépend de la culture.

Quant au fait que des nombres soient arrondis dans ta base de données, la seule raison que je vois est que des champs "décimaux" dans ta base ont une précision de 0 chiffre après la virgule ;-)
Il te faut donc modifier le type / la précision des champs de ta base de données.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
3