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 -
A voir également:
- Movieconverttool
- 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
- Youtube convert - 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+