Multiplication entre textbox [Résolu]

jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 19 oct. 2016 à 19:06 - Dernière réponse : Whismeril 11405 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention
- 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
Afficher la suite 

20 réponses

Répondre au sujet
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - Modifié par cs_ShayW le 19/10/2016 à 20:25
0
Utile
2
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 ?
jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 20 oct. 2016 à 07:53
D'accord. merci pour ton retour sur les options.
Le séparateur décimal est un point
jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 20 oct. 2016 à 13:14
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
Commenter la réponse de cs_ShayW
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 19 oct. 2016 à 20:03
0
Utile
1
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 !
jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 20 oct. 2016 à 07:54
le séparateur sera un point
Commenter la réponse de ucfoutu
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - Modifié par vb95 le 19/10/2016 à 20:50
0
Utile
1
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. 
jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 20 oct. 2016 à 07:54
D'ac je vais regarder ces fameuses références.
Merci VB95
Commenter la réponse de vb95
Whismeril 11405 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 20 oct. 2016 à 08:26
0
Utile
1
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.
jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 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
Commenter la réponse de Whismeril
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - Modifié par cs_Le Pivert le 20/10/2016 à 12:12
0
Utile
3
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
jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 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.
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 20 oct. 2016 à 13:46
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

@+
jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 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
Commenter la réponse de cs_Le Pivert
Whismeril 11405 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 20 oct. 2016 à 15:06
0
Utile
6
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
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention > jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 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
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention > vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 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
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention > cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 20 oct. 2016 à 17:08
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
Whismeril 11405 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention > vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 21 oct. 2016 à 08:22
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.
jerlo11 82 Messages postés mardi 19 mai 2015Date d'inscription 30 janvier 2018 Dernière intervention - 21 oct. 2016 à 07:18
;)
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.