Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Invité de passage
    Inscrit en
    octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 4
    Points : 1
    Points
    1

    Par défaut [VB.NET] Conversion de String en Double

    J'ai de la dificulté à convertir des strings en double.

    Ex:
    Dim d as double

    ' J'ai esseyé les fonctions suivant et ça ne fonctionne pas...

    d = CDbl("1.20")

    d = CStr("1.20")

    d = Convert.ToDouble("1.20")

    Quelqu'un a une solution ?

  2. #2
    Membre Expert
    Avatar de Mehdi Feki
    Inscrit en
    décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : décembre 2004
    Messages : 1 113
    Points : 1 520
    Points
    1 520

    Par défaut

    Code Vb.Net :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            Dim d1 As Double
            Dim d2 As Double
            Dim d3 As Double
            Dim d4 As Double
            Dim d5 As Double
     
            Dim ImputString As String = "1.20"
     
            d1 = CDbl(ImputString)
            d2 = ImputString
            d3 = Convert.ToDouble(ImputString)
            Double.TryParse(ImputString, d4)
            d5 = Double.Parse(ImputString)

    Quel genre d'exception as-tu ?
    Mehdi Feki : Modérateur .Net

  3. #3
    Invité de passage
    Inscrit en
    octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Aucune de ces méthodes fonctionnent...
    J'obtiens un:

    "InvalidCastException was unhandled: Conversion from string "1.20" to type 'Double' is not valid."

    et pour d3 & d5 j'obtiens un:
    "Input string was not in a correct format"


  4. #4
    Membre éclairé
    Inscrit en
    janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : janvier 2006
    Messages : 324
    Points : 316
    Points
    316

    Par défaut

    C'est normal chose que je n'explique pas mais qui m'as posé de grave problème la nuit pour dormir le parseur de double ne considère pas le point comme un séparateur decimal mais il utilise la VIRGULE.

    Code Vb.Net :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim d1 As Double
            Dim d2 As Double
            Dim d3 As Double
            Dim d4 As Double
            Dim d5 As Double
     
            Dim ImputString As String = "1,20"
     
            d1 = CDbl(ImputString)
            d2 = ImputString
            d3 = Convert.ToDouble(ImputString)
            Double.TryParse(ImputString, d4)
            d5 = Double.Parse(ImputString)
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  5. #5
    Invité de passage
    Inscrit en
    octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Ça fonctionne merci !!!

    C'est que Windows en français utilise la virgule par defaut comme symbole séparateur de décimal, tandis que Windows en anglais utilise le point.

    On peut utiliser le point comme séparateur avec Windows français en changeant le symbole décimal dans les "Options régionales et linguistiques".

    Ce qui m'inquiète c'est que VB voit une différence entre le point et la virgule, ce qui risque de causer des problèmes de compatibilité lorsque l'on exécute un programme développé en VB sur un Windows en français et sur un Windows en anglais.

    Merci pour la solution !!

  6. #6
    Membre Expert
    Avatar de Mehdi Feki
    Inscrit en
    décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : décembre 2004
    Messages : 1 113
    Points : 1 520
    Points
    1 520

    Par défaut

    +1 pour ekinox17,

    sinon tu peux modifier le format de la separation à l'aide de NumberDecimalSeparator

    Code Vb.Net :
    1
    2
    3
    4
    5
    6
    7
     
    Dim ciClone As CultureInfo = CType(CultureInfo.InvariantCulture.Clone(), CultureInfo)
    ciClone.NumberFormat.NumberDecimalSeparator = "."
     
    Dim ImputString As String = "1.20"
    d3 = Convert.ToDouble(ImputString, ciClone)
    d5 = Double.Parse(ImputString, ciClone)
    Mehdi Feki : Modérateur .Net

  7. #7
    Invité de passage
    Inscrit en
    octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Super! Ça fonctionne aussi !

    Et en plus, ça règle le problème d'incompatibilité entre les versions de Windows.

    Merci Mehdi !!!

  8. #8
    Membre éclairé
    Inscrit en
    janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : janvier 2006
    Messages : 324
    Points : 316
    Points
    316

    Par défaut

    Merci mehdi,
    J'ai honte j'avais pas chercher plus loin : j'avais utilisé
    Code :
    Convert.ToDouble(MonDoubleAParser.Replace('.',','));
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  9. #9
    Membre Expert
    Avatar de Mehdi Feki
    Inscrit en
    décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : décembre 2004
    Messages : 1 113
    Points : 1 520
    Points
    1 520

    Par défaut

    Tant mieu

    JB-Tech n'oublie pas de cliquer sur le bouton
    Mehdi Feki : Modérateur .Net

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •