Convert | VB.net
Résolu
Xineroks
Messages postés
158
Date d'inscription
Statut
Membre
Dernière intervention
-
Xineroks Messages postés 158 Date d'inscription Statut Membre Dernière intervention -
Xineroks Messages postés 158 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essais de convertir la valeur d'une textbox en decimal afin d'effectuer ma requête correctement, j'ai vraiment mis en place des choses qui me paraissent bonnes, j'ai fouillé sur plusieurs forum, plusieurs technique mais rien n'y fait,
voici mon code avec l'une des tentatives :
j'ai donc tenté le Cdec(matextbox.text) mais j'ai l'erreur comme quoi on ne peut pas convertir en decimal du text...
j'ai tenté le Math.round, mêlé aussi avec du Cdec...
J'ai testé tout ce que j'ai trouvé mais rien n'y fait.
C'est pourquoi je vous sollicite :),
Merci d'avance. Cordialement,
Xineroks
J'essais de convertir la valeur d'une textbox en decimal afin d'effectuer ma requête correctement, j'ai vraiment mis en place des choses qui me paraissent bonnes, j'ai fouillé sur plusieurs forum, plusieurs technique mais rien n'y fait,
voici mon code avec l'une des tentatives :
If maregex.IsMatch(TB_MtRecu.Text) Then
resultat1 = Math.Round(CDec(TB_MtRecu.Text), 2)
resultat2 = Math.Round(CDec(TB_Total_Global.Text), 2)
If ((resultat1 < resultat2) And 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
j'ai donc tenté le Cdec(matextbox.text) mais j'ai l'erreur comme quoi on ne peut pas convertir en decimal du text...
j'ai tenté le Math.round, mêlé aussi avec du Cdec...
J'ai testé tout ce que j'ai trouvé mais rien n'y fait.
C'est pourquoi je vous sollicite :),
Merci d'avance. Cordialement,
Xineroks
A voir également:
- Movieconverttool
- Movie convert tool - Télécharger - Conversion & Codecs
- Xn convert - Télécharger - Photo & Graphisme
- Media convert - Télécharger - Conversion & Codecs
- Full convert - Télécharger - Gestion de données
- Convert master - Télécharger - Conversion & Codecs
8 réponses
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.
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
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...
^^' 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
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
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)
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+
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
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...
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+