Convert | VB.net
Résolu/Fermé
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
-
19 janv. 2012 à 12:10
Xineroks Messages postés 158 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 25 janvier 2014 - 19 janv. 2012 à 17:21
Xineroks Messages postés 158 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 25 janvier 2014 - 19 janv. 2012 à 17:21
A voir également:
- Convert | VB.net
- Xn convert - Télécharger - Photo & Graphisme
- Movie convert tool - Télécharger - Conversion & Codecs
- Media convert - Télécharger - Conversion & Codecs
- Full convert - Télécharger - Gestion de données
- Convert epub to kindle - Guide
8 réponses
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
Modifié par lermite222 le 19/01/2012 à 12:32
Modifié par lermite222 le 19/01/2012 à 12:32
Bonjour,
Une entrée décimale en texte est avec une virgule et les nombres sont avec un point, avant d'appliquer Math... ou autre faut changer la virgule en point.
Voir avec la fonction Replace.
A+
Voir..
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Une entrée décimale en texte est avec une virgule et les nombres sont avec un point, avant d'appliquer Math... ou autre faut changer la virgule en point.
Voir avec la fonction Replace.
A+
Voir..
resultat1 = Math.Round(CDec(Replace(TB_MtRecu.Text, ",", ".")), 2)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 14:01
19 janv. 2012 à 14:01
Merci pour cette réponse lermite, j'ai effectivement mis en place une Regex qui gère cela :
Dim maregex As New Regex("^\d{1,3}(\.\d{1,2})?$")
Mais le soucis c'est que même en mettant le "."
j'ai toujours l'erreur :
La conversion de la chaîne "12.32" en type 'Decimal' n'est pas valide.
Y'a rien de plus valide que ça ? Je ne comprend vraiment pas lol
Dim maregex As New Regex("^\d{1,3}(\.\d{1,2})?$")
Mais le soucis c'est que même en mettant le "."
j'ai toujours l'erreur :
La conversion de la chaîne "12.32" en type 'Decimal' n'est pas valide.
Y'a rien de plus valide que ça ? Je ne comprend vraiment pas lol
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 14:43
19 janv. 2012 à 14:43
Quand je fais un Decimal.tryparse(TB_montantrecu.text, resultat1)
J'ai bien la TB qui est a 23.23, mais le resultat est à 0D
Alors que même syntaxe pour le 2
Decimal.tryparse(TB_total_global.text, resultat2)
J'ai la TB à 45.24 et le resultat2 à 45.24D.
Quelque chose ne vas pas sur ma TB_montantrecu
C'est vraiment bizarre, je vais voir du coté des propriétés...
J'ai bien la TB qui est a 23.23, mais le resultat est à 0D
Alors que même syntaxe pour le 2
Decimal.tryparse(TB_total_global.text, resultat2)
J'ai la TB à 45.24 et le resultat2 à 45.24D.
Quelque chose ne vas pas sur ma TB_montantrecu
C'est vraiment bizarre, je vais voir du coté des propriétés...
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 14:47
19 janv. 2012 à 14:47
Quand je rentre un entier ça passe sans erreur...
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 14:53
19 janv. 2012 à 14:53
Quand je rentre une valeur decimal qui vient de resultat1, j'ai toujours 0.
Mais quand c'est resultat2, la valeur est la bonne...
Pourquoi un tel problème pour quelque chose d'aussi simpliste?
Mais quand c'est resultat2, la valeur est la bonne...
Pourquoi un tel problème pour quelque chose d'aussi simpliste?
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
19 janv. 2012 à 15:39
19 janv. 2012 à 15:39
Tu n'aurais pas déclaré Resultat1 en integer ou long ?
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
19 janv. 2012 à 15:40
19 janv. 2012 à 15:40
Up, poste croiser
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 15:42
19 janv. 2012 à 15:42
^^' sorry. Eh bien pour faire plus simple je vais poster toute ma procédure,
sinon, c'est bien de type Decimal.
sinon, c'est bien de type Decimal.
Private Sub B_Payer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Payer.Click Dim moncode() As String moncode = Split(LB_AdRech.SelectedItem, " ") Dim sqlCnx As New System.Data.Odbc.OdbcConnection(My.Settings.CS_CantineBDD) Dim updatefact As New System.Data.Odbc.OdbcCommand("", sqlCnx) Dim maregex As New Regex("^\d{1,3}(\.\d{1,2})?$") Dim dateentiere() As String Dim resultat1 As Decimal, resultat2 As Decimal dateentiere = Split(CB_DateFact.SelectedItem, "/") resultat1 = CDec(TB_MtRecu.Text) sqlCnx.Open() If CB_DateFact.Text <> "" Then If maregex.IsMatch(TB_MtRecu.Text) Then If (Not (Decimal.TryParse(TB_MtRecu.Text, resultat1) < Decimal.TryParse(TB_Total_Global.Text, resultat2) And Decimal.TryParse(TB_MtRecu.Text, resultat1) >= 0)) Then updatefact.CommandText() = "UPDATE facture SET montantrecu = " & resultat1 & ", datereg = '" & Today.Year & "-" & Today.Month & "-" & Today.Day & "' WHERE datefact = '" & dateentiere(2) & "-" & dateentiere(1) & "-" & dateentiere(0) & "' AND codeparentf = " & moncode(0) & "" updatefact.ExecuteNonQuery() Else MsgBox("Veuillez saisir un montant comprit entre 0 et le montant total de la facture", MsgBoxStyle.OkOnly, "Avertissement") End If Else MsgBox("Saisissez une valeur correcte", MsgBoxStyle.OkOnly, "Avertissement") End If Else MsgBox("Veuillez d'abord selectionner une date correspondant à une facture d'une famille", MsgBoxStyle.OkOnly, "Avertissement") End If sqlCnx.Close() End Sub
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 16:02
19 janv. 2012 à 16:02
Dim resultat1 As Decimal, resultat2 As Decimal resultat2 = CDec(TB_Total_Global.Text) resultat1 = CDec(TB_MtRecu.Text)
On est d'accord, y'a aucune différence entre les deux ?
Quand je met exactement la même valeur, j'obtiens l'erreur sur resultat1 = CDec(TB_MtRecu.Text)...
^^'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
19 janv. 2012 à 16:10
19 janv. 2012 à 16:10
quel est le format exact de TB_MtRecu.Text
je veux dire, le formatage avec par exemple $ ou autre
Et ce sera pas plus confortable d'initialiser Resultat1 / et 2 directement et ensuite se servir de la variable et plus chaque fois du TryParse (ça n'a rien à voir avec ta question)
je veux dire, le formatage avec par exemple $ ou autre
Et ce sera pas plus confortable d'initialiser Resultat1 / et 2 directement et ensuite se servir de la variable et plus chaque fois du TryParse (ça n'a rien à voir avec ta question)
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 16:15
19 janv. 2012 à 16:15
J'essais pleins de choses pour voir ^^ j'ai essayer sans utiliser mes variables resultat, donc en mettant directement en dur dans la requête. Le tryparse j'ai testé aussi. Bref, sinon je ne comprend pas trop ce que tu veux dire par format du textbox ?
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
19 janv. 2012 à 16:21
19 janv. 2012 à 16:21
Je crois que j'ai trouver ton problème, j'ai fait un essais pour être sûr.
TryParse se sert du séparateur LOCAL pour faire le transfert ce qui veux dire que tu ne doit pas changer la virgule en point.
Si c'est un OS US il fera la même chose mais avec le point.
A+
TryParse se sert du séparateur LOCAL pour faire le transfert ce qui veux dire que tu ne doit pas changer la virgule en point.
Si c'est un OS US il fera la même chose mais avec le point.
A+
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 16:23
19 janv. 2012 à 16:23
Le truc c'est que le tryparse n'est même pas atteint ^^'
Ca bloque sur une instruction toute simple avant, alors que la même qui est exactement identique au dessus fonctionne nikel
Ca bloque sur une instruction toute simple avant, alors que la même qui est exactement identique au dessus fonctionne nikel
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
Modifié par lermite222 le 19/01/2012 à 16:30
Modifié par lermite222 le 19/01/2012 à 16:30
beh oui, mais où ça bloque !! ?
Peut être ici..
Tu te sert d'un enregistrement avant d'ouvrir la table.
Peut être ici..
resultat1 = CDec(TB_MtRecu.Text) sqlCnx.Open()
Tu te sert d'un enregistrement avant d'ouvrir la table.
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 16:30
19 janv. 2012 à 16:30
Dim resultat1 As Decimal, resultat2 As Decimal
resultat2 = CDec(TB_Total_Global.Text)
resultat1 = CDec(TB_MtRecu.Text)
l'erreur est ici :
resultat1 = CDec(TB_MtRecu.Text)
On ne peut pas convertir ...
alors que la :
resultat2 = CDec(TB_Total_Global.Text)
Qui est exactement pareil, ça passe.
resultat2 = CDec(TB_Total_Global.Text)
resultat1 = CDec(TB_MtRecu.Text)
l'erreur est ici :
resultat1 = CDec(TB_MtRecu.Text)
On ne peut pas convertir ...
alors que la :
resultat2 = CDec(TB_Total_Global.Text)
Qui est exactement pareil, ça passe.
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 16:31
19 janv. 2012 à 16:31
Nope aucun soucis la dessus car j'entre la valeur à la main, pas besoin d'ouverture de base
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 16:32
19 janv. 2012 à 16:32
resultat2 = CDec(TB_Total_Global.Text) , cette valeur provient d'une autre proc de cette maniere :
TB_Total_Global.Text = CDbl(TB_Total_Global.Text) + NBreservparenfant.ExecuteScalar * remplissageprix.ExecuteScalar
TB_Total_Global.Text = CDbl(TB_Total_Global.Text) + NBreservparenfant.ExecuteScalar * remplissageprix.ExecuteScalar
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
19 janv. 2012 à 16:33
19 janv. 2012 à 16:33
Up, nouveau croisement :)
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
Modifié par Xineroks le 19/01/2012 à 17:05
Modifié par Xineroks le 19/01/2012 à 17:05
Je poste la solution...
En fait il faut replace 2 fois et convertir, une fois pour la comparaison des deux valeurs, puis pour l'insérer, c'est tordu et ça fonctionne. J'ai pourtant tenté de rentrer une valeur avec virgule direct puis de convertir en Single, mais ça me mettait une erreur, bref... voici la solution :
j'ai passé aussi resultat1 en string
Merci beaucoup de ta patience lermite ;).
J'apprécie vraiment ton aide, mais perso j'aimerai ne plus avoir à demander de l'aide xD
Sans doute que je posterais à nouveau d'ici quelque jours...
En fait il faut replace 2 fois et convertir, une fois pour la comparaison des deux valeurs, puis pour l'insérer, c'est tordu et ça fonctionne. J'ai pourtant tenté de rentrer une valeur avec virgule direct puis de convertir en Single, mais ça me mettait une erreur, bref... voici la solution :
sqlCnx.Open() If CB_DateFact.Text <> "" Then If maregex.IsMatch(TB_MontantRecu.Text) Then resultat1 = CSng(Replace(TB_MontantRecu.Text, ".", ",")) resultat2 = CSng(TB_Total_Global.Text) TB_Commentaire.Text = TB_MontantRecu.Text If (resultat1 < resultat2 And resultat1 >= 0) Then resultat1 = Replace(resultat1, ",", ".") updatefact.CommandText() = "UPDATE facture SET montantrecu = '" & resultat1 & "', datereg = '" & Today.Year & "-" & Today.Month & "-" & Today.Day & "' WHERE datefact = '" & dateentiere(2) & "-" & dateentiere(1) & "-" & dateentiere(0) & "' AND codeparentf = " & moncode(0) & "" updatefact.ExecuteNonQuery() Else MsgBox("Veuillez saisir un montant comprit entre 0 et le montant total de la facture", MsgBoxStyle.OkOnly, "Avertissement") End If Else MsgBox("Saisissez une valeur correcte", MsgBoxStyle.OkOnly, "Avertissement") End If Else MsgBox("Veuillez d'abord selectionner une date correspondant à une facture d'une famille", MsgBoxStyle.OkOnly, "Avertissement") End If sqlCnx.Close()
j'ai passé aussi resultat1 en string
Merci beaucoup de ta patience lermite ;).
J'apprécie vraiment ton aide, mais perso j'aimerai ne plus avoir à demander de l'aide xD
Sans doute que je posterais à nouveau d'ici quelque jours...
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
Modifié par lermite222 le 19/01/2012 à 17:15
Modifié par lermite222 le 19/01/2012 à 17:15
Tout cà parce que tu n'a pas tester ma première solution
Prochaine fois, dis plus Nooonnn j'ai fais çi ou ça... TESTE svp.
Et avec VB.Net ta solution est pas la bonne, ton appli n'est pas transposable.
Et pas besoin de ... bidouller
A+
Prochaine fois, dis plus Nooonnn j'ai fais çi ou ça... TESTE svp.
Et avec VB.Net ta solution est pas la bonne, ton appli n'est pas transposable.
resultat1 = Decimal.TryParse(TextBox1.Text, resultat1)
Et pas besoin de ... bidouller
A+
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 17:13
19 janv. 2012 à 17:13
J'ai testé, mais du coup lorsqu'il fallait mettre dans la base ça ne fonctionnait pas, il fallait revenir sur le "." sinon oui c'était ça.
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
Modifié par lermite222 le 19/01/2012 à 17:18
Modifié par lermite222 le 19/01/2012 à 17:18
up pour la modif
Xineroks
Messages postés
158
Date d'inscription
lundi 9 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2014
3
19 janv. 2012 à 17:21
19 janv. 2012 à 17:21
C'est Exactement ce qu'il me fallait ! Merci, décidément sans toi je ne m'en sortirais pas ! Mais bon c'est comme ça qu'on apprend et ces choses là ça ne s'oublie pas, merci encore !