Multiplication entre textbox [Résolu]

Signaler
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020
-
Messages postés
15954
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mai 2021
-
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

6 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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 ?
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

D'accord. merci pour ton retour sur les options.
Le séparateur décimal est un point
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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 !
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

le séparateur sera un point
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137
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. 
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

D'ac je vais regarder ces fameuses références.
Merci VB95
Messages postés
15954
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mai 2021
546
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.
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

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
Messages postés
7382
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 mai 2021
122
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
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

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.
Messages postés
7382
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 mai 2021
122
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

@+
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

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
Messages postés
15954
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mai 2021
546
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
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137 >
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50 >
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021

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
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137 >
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019

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
Messages postés
15954
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mai 2021
546 >
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021

Bonjour, et de fait le remplacement systématique de la virgule par le point n'est pas forcément la solution....
345,567.234 deviendrait 345.567.234 et là c'est le drame;)

@Jerlo soit tu cherches à obtenir un résultat avec le maximum de représentations possibles et alors tu auras un code compliqué mais peut faillible (ne passeront pas les cas que tu auras oubliés ..), soit à l'inverse tu t'embêtes le moins possible, tryparse et message si ça ne marche pas, le dernier choix étant n'importe quel intermédiaire entre les 2.
Ça dépend de pleins de choses dont avant tout qui va s'en servir et combien de pcs.
Quand tu auras choses, on pourra t'aider à appliquer ce choix le mieux possible.
Messages postés
106
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
8 mai 2020

;)