Conversion String en Double proprement en vb.net [Résolu]

us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2011 à 19:03 - Dernière réponse : us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention
- 13 sept. 2011 à 14:29
Bonjour,

Tout est dans la question.

"Conversion String en Double proprement en vb.net"

J'ai beau essayer plusieurs machins, rien n'est vraiment propre... Et je ne vois pas comment faire...

Voici une base :

    ' Conversion d'une String en Double
    Function CSD(ByVal NombreString As String) As Double
        Try
            Return Double.Parse(NombreString)
            ' Return Convert.ToDouble(NombreString.Replace(".", ","))
            ' Return CDbl(NombreString)
        Catch
            Return 0
        End Try
    End Function


Mais cela ne renvoi toujours dans le debuggeur un message, même si le résultat est celui que je veux...
En gros, je veux aussi que si la conversion de la string n'est pas un nombre valide, il ne renvoi zéro, mais sans message d'erreur " Une exception de première chance de type 'System.InvalidCastException' s'est produite dans Microsoft.VisualBasic.dll "... affreux, affreux, affreux...

Amicalement,
Us.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 12 sept. 2011 à 19:15
3
Merci
Bonjour,

Un problème de séparateur ? (je vois tes lignes en commentaire)

Et si tu essayais quelque-chose genre :

Dim ciClone As CultureInfo = CType(CultureInfo.InvariantCulture.Clone(), CultureInfo)
ciClone.NumberFormat.NumberDecimalSeparator = "."
 
Dim toto As String = "1.20"
dim res1 as double, res2 as double
res1 = Convert.ToDouble(toto, ciClone)
res2 = Double.Parse(toto, ciClone)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
NHenry 14272 Messages postés vendredi 14 mars 2003Date d'inscription 15 octobre 2018 Dernière intervention - 12 sept. 2011 à 19:19
3
Merci
Bonjour,

Sinon, il y a aussi Double.TryParse pour gérer les cas d'erreur.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 12 sept. 2011 à 22:55
3
Merci
Salut

attention
NombreString = NombreString.Replace(".", ",").ToString


c'est bon si le decimal séparateur est ,
mais si c'est un .
peut etre comme ça

Function CSD(ByVal NombreString As String) As Double
Dim sp As String
sp = 1 / 2
sp = sp.Substring(1, 1)

        CSD = 0
        NombreString = NombreString.Replace(".", sp).ToString()
        Double.TryParse(NombreString, CSD)

    End Function

Merci cs_ShayW 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de cs_ShayW
Meilleure réponse
NHenry 14272 Messages postés vendredi 14 mars 2003Date d'inscription 15 octobre 2018 Dernière intervention - 13 sept. 2011 à 09:16
3
Merci
Bonjour,

Pour précision :
CChar(".")
est équivalent à
"."c

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 13 sept. 2011 à 14:29
3
Merci
Re,

Yes

' Conversion d'une String en Double
Function CSD(ByVal NombreString As String) As Double
  CSD = 0
  Double.TryParse(NombreString.Replace("."c, (1 / 2).ToString.Substring(1, 1)).ToString(), CSD)
End Function


Record battu !

Amicalement,
Us.

Merci us_30 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2011 à 19:30
0
Merci
Bonjour,

"CultureInfo" mon VB2010 ne le reconnait pas ?! Je fais comment...

Double.TryParse ? Je mets quoi pour le 2ième parametre "byref result as double" ? mystère...
J'ai essayé zéro, mais cela donne rien.

=

Dans une belle fonction cela donne quoi ?

=

Amicalement,
Us.
Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2011 à 19:53
0
Merci
Okay, j'ai trouvé, enfin...


    ' Conversion d'une String en Double
    Function CSD(ByVal NombreString As String) As Double

        CSD = 0
        NombreString = NombreString.Replace(".", ",").ToString()
        Double.TryParse(NombreString, CSD)

    End Function


Et "CultureInfo" c'est la référence System.globalization.... Il fallait le trouver celui-là .

Merci à vous deux.

Amicalement,
Us.
Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2011 à 23:57
0
Merci
Bonsoir,

Ah, oui... je n'y avais pas pensé dans l'autre sens. Pour les quelques anglais qui utilisent le "point". D'où l'intérêt de "CultureInfo " aussi.

Par esprit de 'contraction' :

    ' Conversion d'une String en Double
    Function CSD(ByVal NombreString As String) As Double
        CSD = 0
        NombreString = NombreString.Replace(".", (1 / 2).ToString.Substring(1, 1)).ToString()
        Double.TryParse(NombreString, CSD)
    End Function



Merci pour ta bonne remarque.

Amicalement,
Us.
Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 13 sept. 2011 à 00:17
0
Merci
Ouais, parce que j'aime bien... Encore plus court :

' Conversion d'une String en Double
Function CSD(ByVal NombreString As String) As Double
  CSD = 0
  Double.TryParse(NombreString.Replace(CChar("."), (1 / 2).ToString.Substring(1, 1)).ToString(), CSD)
End Function


et respecte l'option strict en plus ! Je ne vois pas mieux ensuite...

Amicalement,
Us.
Commenter la réponse de us_30

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.