A voir également:
- Saisir nombre à virgule dans une base de données
- Rech. ou saisir l'url - Guide
- Virginie organise un rallye avec 30 équipes. elle veut créer un code pour désigner chaque équipe. elle a commencé à la main, mais elle voudrait le faire calculer à l'aide d'une formule. proposez une formule comportant une seule fonction et à recopier vers le bas dans la colonne a du fichier à télécharger. quelle formule sera en a9 ? ✓ - Forum Programmation
- Formules excel de base - Guide
- Exemple base de données access à télécharger gratuit ✓ - Forum Logiciels
- Gigaset ne reconnait plus sa base - Forum telephonie fixe
4 réponses
Utilisateur anonyme
29 avril 2017 à 23:48
29 avril 2017 à 23:48
Bonjour
Pourquoi dis-tu "Ma requête ressemble à" et non pas "Ma requête est" ?
As-tu affiché ta requête réelle, ou est-ce seulement que tu crois que la requête est celle-ci parce que tu le déduis des valeurs que tu utilises pour nom et prix ? Je me méfie particulièrement des flottants qui, n'ayant la plupart du temps pas de représentation exacte, ne sont pas toujours ce qu'on croit.
Pourquoi dis-tu "Ma requête ressemble à" et non pas "Ma requête est" ?
As-tu affiché ta requête réelle, ou est-ce seulement que tu crois que la requête est celle-ci parce que tu le déduis des valeurs que tu utilises pour nom et prix ? Je me méfie particulièrement des flottants qui, n'ayant la plupart du temps pas de représentation exacte, ne sont pas toujours ce qu'on croit.
J'ai utilisé une MessageBox pour voir à quoi ressemblait la requête après la saisie, j'ai fait un copier-coller de la MessageBox et je l'ai testée directement dans la base de données et ça a marché.
Même si les 0 inutiles sont retirés, il devrait au moins avoir la valeur "19.9" dans la base de données.
Ce que je comprends pas c'est que quand je saisis un nombre rond comme 20, la requête fonctionne et c'est dès qu'il y a le point que ça ne marche plus
Même si les 0 inutiles sont retirés, il devrait au moins avoir la valeur "19.9" dans la base de données.
Ce que je comprends pas c'est que quand je saisis un nombre rond comme 20, la requête fonctionne et c'est dès qu'il y a le point que ça ne marche plus
Utilisateur anonyme
30 avril 2017 à 16:42
30 avril 2017 à 16:42
Je serais curieux de savoir comment tu as fait pour faire la requête dans une MessageBox. C'était bien à l'intérieur de la fonction ajouterUnProduit ?
Quand j'essaye ton code, la conversion faite par C# me donne 19,9 avec une virgule et sans 0.
J'ai installé C# - que je en connais pas - et fait quelques essai. J'ai réussi à obtenir ton message d'erreur, mais pas du tout à ce niveau-ci du code. C'est en convertissant le prix- lu comme une chaîne de caractères - en un float que ce message apparaît, si on met un . dans le nombre au lieu d'une ,.
Car à l'intérieur de ta fonction ajouterUnProduit, ce n'est pas toi qui choisis de mettre une virgule ou un point dans prix : c'est un float et c'est C# qui décide du séparateur qu'il utilise.
Quand j'essaye ton code, la conversion faite par C# me donne 19,9 avec une virgule et sans 0.
J'ai installé C# - que je en connais pas - et fait quelques essai. J'ai réussi à obtenir ton message d'erreur, mais pas du tout à ce niveau-ci du code. C'est en convertissant le prix- lu comme une chaîne de caractères - en un float que ce message apparaît, si on met un . dans le nombre au lieu d'une ,.
Car à l'intérieur de ta fonction ajouterUnProduit, ce n'est pas toi qui choisis de mettre une virgule ou un point dans prix : c'est un float et c'est C# qui décide du séparateur qu'il utilise.
Bonsoir le père,
plus précisément dans le code source le symbole décimal est le point.
Mais lors de la conversion de string vers float, par défaut c'est la configuration du PC qui compte, donc si tu as la virgule comme symbole décimal, C# ne saura pas convertir ce texte en flaot (enfin pas directement), par contre si tu as le point comme symbole décimal ça marchera.
La solution qui marche dans une majorité de cas sans se poser de question (sauf si le string utilise la virgule comme séparateur de millier...) et de replacer la virgule par le point (si y'en a pas il ne se passe rien) et ensuite forcer C# à convertir en mode "comme dans le code".
Pour SQL, je ne sais pas je ne connais pas
plus précisément dans le code source le symbole décimal est le point.
Mais lors de la conversion de string vers float, par défaut c'est la configuration du PC qui compte, donc si tu as la virgule comme symbole décimal, C# ne saura pas convertir ce texte en flaot (enfin pas directement), par contre si tu as le point comme symbole décimal ça marchera.
La solution qui marche dans une majorité de cas sans se poser de question (sauf si le string utilise la virgule comme séparateur de millier...) et de replacer la virgule par le point (si y'en a pas il ne se passe rien) et ensuite forcer C# à convertir en mode "comme dans le code".
double val = Convert.ToDouble("19,90".Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture); double val2 = Convert.ToDouble("19.90".Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
Pour SQL, je ne sais pas je ne connais pas
Pour faire apparaître la requête dans une MessageBox j'ai fait :
J'ai essayé en utilisant Convert.ToDouble et Replace sauf que ça marche pas non plus.
Quand je fais
Si j'inverse et je fais
Si je tente des folies en essayant
Et j'ai quand même essayé
Voilà je sais pas trop quoi faire j'ai essayé tout ce qui était possible et inimaginable
MessageBox.Show(sql.CommandText.ToString());
J'ai essayé en utilisant Convert.ToDouble et Replace sauf que ça marche pas non plus.
Quand je fais
Replace(",", ".")et que je saisis "19.90", ça devient "19,90". Si je saisis "19,90" la valeur reste inchangée.
Si j'inverse et je fais
Replace(".", ",")et que je saisis "19.90" ou "19,90" il ça devient "1990".
Si je tente des folies en essayant
Replace(".", ".")avec comme saisie "19.90" ça devient "19,90". Et si je saisis "19,90", ça devient "1990".
Et j'ai quand même essayé
Replace(",", ",")avec comme saisie "19.90", la valeur devient "19,90". Si je saisis "19,90", la valeur devient "1990".
Voilà je sais pas trop quoi faire j'ai essayé tout ce qui était possible et inimaginable
NHenry
Messages postés
15164
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 novembre 2024
345
1 mai 2017 à 17:14
1 mai 2017 à 17:14
Serait-il possible de voir ton code de test ?
Le comportement que tu indique de Replace me semble très étrange.
Le comportement que tu indique de Replace me semble très étrange.
Bobby
>
NHenry
Messages postés
15164
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 novembre 2024
16 mai 2017 à 16:23
16 mai 2017 à 16:23
Voici le code qui récupère la valeur du prix :
double prix = Convert.ToDouble(textBoxPrix.Text.Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
Utilisateur anonyme
1 mai 2017 à 17:30
1 mai 2017 à 17:30
Tu mélanges tout, les strings, les nombres (float ou double) et le code.
Dans le code, que tu écris, pas ce qui s'éxécute réellement, un nombre décimal s'écrit toujours avec un point et sans séparateur de milliers
Pour l'ordinateur, dans un float ou un double, le symbole décimal n'existent pas. Dans sa mémoire, ça n'est pas stocké 19.90, mais 33 33 9F 41Hex pour un float et 66 66 66 66 66 E6 33 40Hex pour un double.
Par contre comme, nous, "pauvres humains" ne sommes pas capables de calculer de tête une mantisse * 2 puissance exposant le tout écrit en héxadécimal, le déboggueur a la gentillesse de nous montrer un représentation du nombre au format du code (toujours le point et pas de séparateur de milliers)
Enfin ToString retourne une représentation du nombre en string qui dépend de la configuration de ton pc
Maintenant si au lieu de continuer avec ta messageBox, tu faisais un vrai débogage en mode pas à pas avec des espions, tu pourrais voir quelque chose comme ça
Les 2 string de départ sont bien convertis en double
Et ensuite les 2 string sont les mêmes, puisque c'est le même nombre et que la config de mon PC n'a pas changé entre les 2 lignes.
Donc tu peux vérifier en pas à pas que la conversion fonctionne (mais cela aurait planté sinon...).
Maintenant, je le répète, pour ta requête SQL, je n'ai pas d'avis je n'en fais pas de sql.
Dans le code, que tu écris, pas ce qui s'éxécute réellement, un nombre décimal s'écrit toujours avec un point et sans séparateur de milliers
double nombre = 19.90;si tu mets une virgule ça plante
Pour l'ordinateur, dans un float ou un double, le symbole décimal n'existent pas. Dans sa mémoire, ça n'est pas stocké 19.90, mais 33 33 9F 41Hex pour un float et 66 66 66 66 66 E6 33 40Hex pour un double.
Par contre comme, nous, "pauvres humains" ne sommes pas capables de calculer de tête une mantisse * 2 puissance exposant le tout écrit en héxadécimal, le déboggueur a la gentillesse de nous montrer un représentation du nombre au format du code (toujours le point et pas de séparateur de milliers)
Enfin ToString retourne une représentation du nombre en string qui dépend de la configuration de ton pc
double nombre = 1999.9; string texte = nombre.ToString() texte vaudra "1999,9" ou "1 999,9" ou "1,999.9" ou "1999.9" etc selon la configuration de ton PC
Maintenant si au lieu de continuer avec ta messageBox, tu faisais un vrai débogage en mode pas à pas avec des espions, tu pourrais voir quelque chose comme ça
Les 2 string de départ sont bien convertis en double
- "19,90" => 19.9
- "19.9" => 19.9
Et ensuite les 2 string sont les mêmes, puisque c'est le même nombre et que la config de mon PC n'a pas changé entre les 2 lignes.
Donc tu peux vérifier en pas à pas que la conversion fonctionne (mais cela aurait planté sinon...).
Maintenant, je le répète, pour ta requête SQL, je n'ai pas d'avis je n'en fais pas de sql.
30 avril 2017 à 00:25
Ma requête ressemble à : "INSERT INTO produit VALUES (NULL, 'test', 19.90);"
Je doute fortement, car quand tu converti un flottant en string, il retire les 0 inutiles.
En plus, le
... + prix + ...
.Net refuse de convertir implicitement les flottant en string.