Text box
Résolu/Fermé
Utilisateur anonyme
-
13 nov. 2018 à 08:09
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 14 nov. 2018 à 13:31
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 14 nov. 2018 à 13:31
A voir également:
- Text box
- Adresse ip box - Guide
- Ai text classifier - Accueil - Guide Intelligence artificielle
- Music box pro - Télécharger - Lecture & Playlists
- Mycanal box africa ✓ - Forum Box et Streaming vidéo
- Changer mot de passe WIFI - Forum WiFi
5 réponses
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
13 nov. 2018 à 08:23
13 nov. 2018 à 08:23
Bonjour,
Où en es tu avec ce post?
https://forums.commentcamarche.net/forum/affich-35687729-remplissage-aleatoire-et-tri-sur-tableau-en-vb-net#p35687729
Où en es tu avec ce post?
https://forums.commentcamarche.net/forum/affich-35687729-remplissage-aleatoire-et-tri-sur-tableau-en-vb-net#p35687729
Utilisateur anonyme
13 nov. 2018 à 11:18
13 nov. 2018 à 11:18
Bonjour
sur ton PC le symbole décimal est il le . ou la , ?
sur ton PC le symbole décimal est il le . ou la , ?
Utilisateur anonyme
13 nov. 2018 à 11:35
13 nov. 2018 à 11:35
encore merci
dans le panneau de config il est sur virgule donc tu as raison quand je tape . il le prend pour du texte
je peux le mettre avec le point et là cà marche
c'était tout bête
un peu d'humour
encore une fois tu as raison c'est rageant ; j'avais cherché mais en vain
donc pb résolu
dans le panneau de config il est sur virgule donc tu as raison quand je tape . il le prend pour du texte
je peux le mettre avec le point et là cà marche
c'était tout bête
un peu d'humour
encore une fois tu as raison c'est rageant ; j'avais cherché mais en vain
donc pb résolu
Utilisateur anonyme
13 nov. 2018 à 12:02
13 nov. 2018 à 12:02
Alors pour éviter ce soucis récurent, au lieu de IsNumeric, utlise Double.TryParse. Il y a une surcharge dans laquelle tu peux préciser la culture.
Dans ton cas, ton pc est en culture française mais tu veux saisir un nombre en culture américaine (comme windows c’est américain, c’est la culture Default).
Tu peux aussi faire une bidouille (si tu estimes que jamais l’utilisateur ne taperras un nombre avec la virgule comme séparateur des milliers) tu fournis au trypparse le texte dans lequel , est remplacé par . et tu dis que la culture est default.
Enfin tu peux t’amuser à detecter les cultures (avec des regex par exemple) et parser selon celle-ci.
Cette question revenant souvent, je pense poster un petit source exemple
Dans ton cas, ton pc est en culture française mais tu veux saisir un nombre en culture américaine (comme windows c’est américain, c’est la culture Default).
Tu peux aussi faire une bidouille (si tu estimes que jamais l’utilisateur ne taperras un nombre avec la virgule comme séparateur des milliers) tu fournis au trypparse le texte dans lequel , est remplacé par . et tu dis que la culture est default.
Enfin tu peux t’amuser à detecter les cultures (avec des regex par exemple) et parser selon celle-ci.
Cette question revenant souvent, je pense poster un petit source exemple
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
13 nov. 2018 à 22:03
13 nov. 2018 à 22:03
Voila
https://codes-sources.commentcamarche.net/faq/11316-conversion-de-string-en-nombre-en-net-c-et-vb-net
c'est le 1er jet, n'hésitez ni l'un ni l'autre à me remonter des erreurs, des formulations trop nébuleuses ou de fautes d'orthographe.
https://codes-sources.commentcamarche.net/faq/11316-conversion-de-string-en-nombre-en-net-c-et-vb-net
c'est le 1er jet, n'hésitez ni l'un ni l'autre à me remonter des erreurs, des formulations trop nébuleuses ou de fautes d'orthographe.
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
Modifié le 14 nov. 2018 à 10:05
Modifié le 14 nov. 2018 à 10:05
Très intéressant. Par contre il faudrait que tu indiques que toutes les fonctions doivent être mises dans le module comme ceci:
a moins que j''ai zappé cela
Beau travail
ps ton tuto est dans C mais pas dans VB.Net!
@+ Le Pivert
Option Strict On Imports System.Globalization Imports System.Text.RegularExpressions Friend Module Extensions ''' <summary> ''' Tente de convertir une string en double sans se poser de question ''' </summary> ''' <param name="Texte"></param> ''' <returns>Le double si c'est possible, Not A Number dans le cas contraire</returns> <System.Runtime.CompilerServices.Extension()> Public Function ToDoubleBasique(ByVal Texte As String) As Double Dim nombre As Double If Double.TryParse(Texte, nombre) Then Return nombre Else Return Double.NaN End If End Function ''' <summary> ''' Tente de convertir un texte au format #######.#### ou #######,##### en remplaçant la virgule par le point et en forçant la culture par défaut (Invariant Culture) ''' </summary> ''' <param name="Texte"></param> ''' <returns>Le double si c'est possible, Not A Number dans le cas contraire</returns> <System.Runtime.CompilerServices.Extension()> Public Function ToDoubleGereSymboleDecimal(ByVal Texte As String) As Double Dim nombre As Double If Double.TryParse(Texte.Replace(","c, "."c), NumberStyles.Number, CultureInfo.InvariantCulture, nombre) Then Return nombre Else Return Double.NaN End If End Function ''' <summary> ''' Tente de déterminer si le texte représente un nombre et de le convertir en double le cas échéant ''' </summary> ''' <param name="Texte"></param> ''' <returns>Le double si c'est possible, Not A Number dans le cas contraire</returns> <System.Runtime.CompilerServices.Extension()> Public Function ToDouble(ByVal Texte As String) As Double Dim culture As CultureInfo = CultureInfo.InvariantCulture If Regex.IsMatch(Texte, "^\d{1,3}( ?\d{3})*([\.,](\d{3} ?)*\d{1,3})?$") Then 'teste avec une regex qui cherche un nombre représenté avec ou sans espace comme séparateur des milliers et soit le point soit la virgule comme séparateur décimal Texte = Texte.Replace(","c, "."c).Replace(" ", "") 'on enlève les espaces éventuels et on force le. en symbole décimal ElseIf Regex.IsMatch(Texte, "^\d{1,3}(,?\d{3})*(\.(\d{3},?)*\d{1,3})?$") Then 'teste avec une regex qui cherche un nombre représenté avec ou sans virgule comme séparateur des milliers et le point comme séparateur décimal Texte = Texte.Replace(",", "") 'on enlève les espaces virgules End If 'si on connait une autre culture il faut faire un autre else if avec une regex adaptée Dim nombre As Double If Double.TryParse(Texte, NumberStyles.Number, CultureInfo.InvariantCulture, nombre) Then Return nombre Else Return Double.NaN End If End Function End Module Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 'lesNombres est une liste de double ListBox1.Items.Add("123.4".ToDoubleBasique()) 'ajoute 123.4 si le symbole décimal du PC est le point et NaN dans le cas contraire ListBox1.Items.Add("123,4".ToDoubleBasique()) 'ajoute 123.4 si le symbole décimal du PC est la virgule et NaN dans le cas contraire ListBox1.Items.Add("1 234".ToDoubleBasique()) 'ajoute 1234.0 si la culture est française et NaN dans le cas contraire ListBox1.Items.Add("1 234,1".ToDoubleBasique()) 'ajoute 1234.1 si la culture est française et NaN dans le cas contraire ListBox1.Items.Add("1,234.1".ToDoubleBasique()) 'ajoute 1234.1 si la culture est américaine et NaN dans le cas contraire End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click ListBox1.Items.Add("123.4".ToDoubleGereSymboleDecimal()) 'ajoute 123.4 quelque soit le symbole décimal du PC ListBox1.Items.Add("123,4".ToDoubleGereSymboleDecimal()) 'idem ListBox1.Items.Add("1 234".ToDoubleGereSymboleDecimal()) 'ajoute NaN quelque soit le symbole décimal du PC ListBox1.Items.Add("1 234.1".ToDoubleGereSymboleDecimal()) 'idem ListBox1.Items.Add("1 234,1".ToDoubleGereSymboleDecimal()) 'idem ListBox1.Items.Add("1,234.1".ToDoubleGereSymboleDecimal()) 'idem End Sub Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click ListBox1.Items.Add("123.4".ToDouble()) 'ajoute 123.4 quelque soit le symbole décimal du PC ListBox1.Items.Add("123,4".ToDouble()) 'idem ListBox1.Items.Add("1 234".ToDouble()) 'ajoute 1234.0 quelque soit la culture du PC ListBox1.Items.Add("1 234.1".ToDouble()) 'ajoute 1234.1 quelque soit la culture du PC ListBox1.Items.Add("1 234,1".ToDouble()) 'idem ListBox1.Items.Add("1 234.1".ToDouble()) 'idem ListBox1.Items.Add("1,234.1".ToDouble()) 'idem ListBox1.Items.Add("1,234,456".ToDouble()) 'ajoute 123456.0 quelque soit la culture du PC End Sub End Class
a moins que j''ai zappé cela
Beau travail
ps ton tuto est dans C mais pas dans VB.Net!
@+ Le Pivert
J'ai mis
VB95 m'a dit la même chose pour NaN
Et oui je l'ai mis dans C# même si je présente aussi le code en VB.NET, parce que ça me gonfle de le faire en double.
Je donnerai le contenu du fichier complet pour le premier exemple, pour les suivants, ce sera juste la nouvelle méthodedans l'intro, mais je peux le remettre au fur et à mesure pour plus de clarté.
VB95 m'a dit la même chose pour NaN
Et oui je l'ai mis dans C# même si je présente aussi le code en VB.NET, parce que ça me gonfle de le faire en double.
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
14 nov. 2018 à 13:31
14 nov. 2018 à 13:31
Merci
En VB.Net (à ajouter dans le module)
C'est plus clair comme cela
@+ le Pivert
En VB.Net (à ajouter dans le module)
C'est plus clair comme cela
@+ le Pivert