Multiplication entre textbox

Résolu
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022 - 19 oct. 2016 à 19:06
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 21 oct. 2016 à 08:22
Bonjour à tous,

Sur VS2015 je n'arrive pas créer une multiplication de plusieurs textbox, les calculs fonctionnent uniquement si les chiffres sont sans décimal.
A partir du moment ou je saisis des valeur du type 8.5 ou 1.3 ect.. le résultat est incorrect.

Exemple de calcul:
Lblresult.Text = (Val(txt1.Text) * Val(txt2.Text)) * (Val(txt3.Text) * 0.01)


Auriez-vous une idée pourquoi les nombres avec décimal ne sont pas prises en compte ? Je ne rencontrai pas ce pb sur VS2010.
Vous remerciant par avance pour vos conseils
A voir également:

6 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 19/10/2016 à 20:25
Bonjour

D'abord active explicit on et option strict on .
Tu fais un mélange de vb6 et vb.net.
Aussi ce n'est pas légal d'assigner un nombre à un string.
lbresult.text est de type string donc il faut lui assigner un string.
la fonct val c'est en vb.6
en net tu dois convertir ton txt1.txt en double mais comme txt1 un textbox il faut verifier si txt1.txt est numérique.


 Dim result(2) As Double
If Double.TryParse(txt1.Text, result(0)) AndAlso Double.TryParse(txt2.Text, result(1)) AndAlso Double.TryParse(txt3.Text, result(2)) Then
Lblresult.Text = (result(0) * result(1) * result(2) * 0.01).ToString
Else
'le contenu des textbox ne sont pas numérique
End If


Est ce que ton séparateur décimal est un point ou une virgule ?
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
20 oct. 2016 à 07:53
D'accord. merci pour ton retour sur les options.
Le séparateur décimal est un point
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
Modifié par jerlo11 le 20/10/2016 à 13:16
J'ai essayé sur ce principe mais sans succès malheureusement.
le calcul me retourne 0.

Je n'ai peut être pas bien saisi la démarche. J'ai également un label dans le lot
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 oct. 2016 à 20:03
Bonjour,
Auriez-vous une idée pourquoi les nombres avec décimal ne sont pas prises en compte

1) avec quel séparateur décimal utilisé ?
2) La fonction Val n'est qu'un héritage de VB6 et est à éviter au profit des fonctions de conversion de VB.Net !
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
20 oct. 2016 à 07:54
le séparateur sera un point
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 19/10/2016 à 20:50
Bonjour à vous tous

Pour Jerlo11
Pour éviter les anciennes fonctions Vb 6 et faire du vrai VB Net
1) Cliquer Projet --> Propriétés du projet
2) Cliquer Références
3) Supprimer toutes les références à Microsoft VisualBasic si elles sont cochées

De plus on multiplie des valeurs numériques et non des Textbox

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
20 oct. 2016 à 07:54
D'ac je vais regarder ces fameuses références.
Merci VB95
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
20 oct. 2016 à 08:26
Bonjour Jerlo, je pense que tu as mal compris les questions sur le séparateur.
Ils ne t'ont pas demandé comment dans ton application tu veux saisir le séparateur, mais quelle est la configuration de Windows.
Avec la configuration par défaut d'un Windows français, le séparateur est la virgule, du coup "1.234" n'est pas reconnu comme une chaine représentant un double, il fait saisir "1,234".

Pour te prémunir de ce genre de questionnement, tu as plusieurs options:
  • utiliser un maskeditbox au lieu d'un textbox, mais c'est parfois compliqué de trouvé un masque adaptés, si par exemple tu ne sais pas d'avance combien de décimales il peut y avoir.
  • chager la configuration de Windows sur tous le sujet pc ou tu vas déployer ton application, avec le risque de poser des problèmes dans une autre appli.
  • le tryParse comme te l'as proposé Shayw, mais ça exclu tout autre format.
  • le tryParse ou la classe Convert en précisant que tu utilises la codification par défaut (à l'américaine), mais ça exclu le format français et oblige l'utilisateur à taper le point côté lettre si son clavier numérique retourne une virgule.
  • remplacer systématiquement les virgules par des point, et convertir avec le format par défaut, il reste à espérer que l'utilisateur ne mettra pas les virgules en séparateur de milliers.
  • une regex, qui autorise le remplace les éventuelles virgules de séparation des milliers par rien, puis l'éventuelle virgule de séparation décimale par le point et convertir avec le format par défaut.


Tu voies qu'une simple conversion de string vers double peut se révéler complexe selon le site paramètres que l'on prend en compte.

La stratégie à mettre en place dépend directement du déploiement prévu pour ton appli, si c'est un truc pour toi et toi seul, tu peux te contenter de taper les nombres comme Windows veut les recevoir, ou choisir un autre format et le spécifier lors de la conversion.
Si tu commence à recevoir des donnée d'un autre pc dont tu ne connais pas la configuration, ou si tu déploies sur un p que tu ne maitrise pas ou alors si tu n'es pas sur de pourvoir informer correctement l'utilisateur, tu peux soit choisir d'envisager plein de cas, ou au contraire avec un tryParse de juste afficher un message disant que le format n'est pas correct.

À toi de choisir.
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
20 oct. 2016 à 13:16
Effectivement je ne savais pas qu'il était autant compliqué de réaliser une simple multiplication sur VS2015.

Sur VS2010 je ne rencontre pas ce genre de pb
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
Modifié par cs_Le Pivert le 20/10/2016 à 12:12
Bonjour à tous:

voir ceci:

http://plasserre.developpez.com/cours/vb-net/?page=procedurale#LIX-B-2

ce qui donne:

  TextBox1.Text = Replace(TextBox1.Text, ".", ",")
        TextBox2.Text = Replace(TextBox2.Text, ".", ",")
        TextBox3.Text = (CDec(TextBox1.Text) * CDec(TextBox2.Text)).ToString


et pour les déclarations de variable Single, Double et Decimal voir ici:


http://plasserre.developpez.com/cours/vb-net/?page=langage-vb2#LV-D-4

voilà!

@+ Le Pivert
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
20 oct. 2016 à 12:56
Bonjour et merci pour ces retours.
Sur la base de ton exemple, j'ai une erreur "la conversion de la chaîne "" en type Decimal n'est pas valide.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
Modifié par cs_Le Pivert le 20/10/2016 à 14:43
Suivant les liens que je t'ai indiqué, tu peux changer tes variables en Double. Sinon tu peux aussi changer aussi les Virgules en Points

Lis aussi ce que t'as expliqué Whismeril que je salue.

A lire aussi:

http://plasserre.developpez.com/cours/vb-net/?page=langage-vb2#LV-G-8

@+
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
21 oct. 2016 à 07:17
Problème résolu avec la manip :
TextBox1.Text = Replace(TextBox1.Text, ".", ",")


Les calculs n’acceptais pas la virgule j'ai l'impression.
Merci à tous pour vos retours cela m'a permis de pousser certaines portes que je ne connaissais pas
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
20 oct. 2016 à 15:06
Effectivement je ne savais pas qu'il était autant compliqué de réaliser une simple multiplication sur VS2015.

Sur VS2010 je ne rencontre pas ce genre de pb


si toute ces situations pouvaient être rencontrées sous "VS2010" et même avec VB6
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
20 oct. 2016 à 15:15
D'accord. Donc VS2015 laisse moins passer les manipulations car les calculs fonctionnent sur VS2010
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
20 oct. 2016 à 15:53
bonjour à tous
Ce ne sont pas les multiplications qui posent problèmes Jerlo11 mais plutôt la transcription en valeur numérique d'une chaine de caractères représentant un nombre réel !
Regarde ceci 1023,7 et 1,023.7
Le premier est en culture française alors que le second est en culture américaine
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
20 oct. 2016 à 16:42
Bonjour

et si en plus tu utilises la virgule pour séparer les groupes
ex 345,567,234
est ce que c'est 345567234 ou 345567,234
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019
Modifié par vb95 le 20/10/2016 à 17:09
Salut cs-Shayw
Aux USA la virgule sépare les groupe de mille et le point sert pour les chiffres décimaux ( non entiers) .
Donc 345,567,234 en culture américaine c'est 345567234 en culture française
Remplace la dernière virgule par un point dans 345,567,234 et tu auras l'équivalent américain de 345567,234 en culture française soit 345,567.234 aux USA
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
21 oct. 2016 à 07:18
;)
0
Rejoignez-nous