Multiplication entre textbox

Résolu
jerlo11
Messages postés
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 2022
- 19 oct. 2016 à 19:06
Whismeril
Messages postés
17337
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
22 mai 2022
- 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

6 réponses

cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
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
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 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
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 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
236
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
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 2022

20 oct. 2016 à 07:54
le séparateur sera un point
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
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
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 2022

20 oct. 2016 à 07:54
D'ac je vais regarder ces fameuses références.
Merci VB95
0
Whismeril
Messages postés
17337
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
22 mai 2022
596
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
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 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
7749
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 mai 2022
129
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
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 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
7749
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 mai 2022
129
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
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 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
17337
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
22 mai 2022
596
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
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 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
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151 > jerlo11
Messages postés
108
Date d'inscription
mardi 19 mai 2015
Statut
Membre
Dernière intervention
13 février 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
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56 > vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022

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
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151 > cs_ShayW
Messages postés
3258
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
Whismeril
Messages postés
17337
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
22 mai 2022
596 > vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022

Modifié par Whismeril le 21/10/2016 à 08:25
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.
0