VB6 convertir string pour double

Résolu
Signaler
Messages postés
34
Date d'inscription
mercredi 21 février 2007
Statut
Membre
Dernière intervention
6 juin 2008
-
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
Bonjour, je doit convertir une variable string en un double.
Exemple:

a = "4.3"
b = "5.7" 'Ne me dite pas d'enlever les "" je ne peux pas car je doit les prendre dans un fichier text alors cest un string
Msgbox a + b

CDbl() ne marche pas!

Aider moi s'il vous plait!!!
Merci!

9 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut,
MsgBox CCur(a)+CCur(b)
Si le séparateur décimal dans las paramètres rgionnaux
est bien le pointSinon tu dois passer par Replace()

<hr />® l l i n g , l' agité du bocal : 
   Etre une heure, une heure seulement..Rien qu' une heure,
   Vert, vert, vert et beau à la foooooooooooooooooooooooois. 
Messages postés
34
Date d'inscription
mercredi 21 février 2007
Statut
Membre
Dernière intervention
6 juin 2008

Ça ne marche pas :(
j'obtiens: Run-time error '13':

Type mismatch.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
    Dim Var1 As String, Var2 As String
    Var1 = "4.4"
    Var2 = "5.7"
   
    MsgBox Val(Var1) + Val(Var2)

MPi
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Bonjour à tous,

Si tu le prends tes données dans un fichier texte, et qu'elles sont représentées comme tu nous le montre, il y a de forte chance pour que ton point de pose un problème, alors dans le cas où(comme le fait remarqué Chaibat05, le bonjour à Rolling), regarde cela :

Private Sub Command1_Click()


Dim MyVarTxt1 As String
Dim MyVarTxt2 As String


MyVarTxt1 = "4.3"
MyVarTxt2 = "5.7"


MyVarTxt1 = Replace(MyVarTxt1, ".", ",")
MyVarTxt2 = Replace(MyVarTxt2, ".", ",")


MsgBox CDbl(MyVarTxt1) + CDbl(MyVarTxt2)


End Sub


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut tout le monde,
@Exploreur, Rolling te salues aussi.
Il est aux anges en ce moment.
Son voeu a été exhaussé et a été, enfin,  mis en vert.

<hr />. 
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
CDbl utilises les paramètres régionnaux.
Val non, c'est un vrai 4x4

ne fais surtout pas :
MyVarTxt1 = Replace(MyVarTxt1, ".", ",")

car ton programme ne fonctionnera pas sur un poste où les parametres régionnaux spécifieront un '.' comme séparateur décimal.

utilises Val, qui s'attend à avoir un point, comme séparateur décimal (format international).
C'est une TRES bonne chose que ton fichier contienne "1.5" et non "1,5" ton appli est plus facilement distribuable.
Val("1,5") ne fonctionera pas, par contre... il renverra 1, fortement perturbé qu'il est par la virgule...

NB. pareil pour CCur, tout dépend des parametres régionnaux.
NB2. même soucis, en général, pour les dates. enregistrez toujours vos dates sous la forme yyyy-mm-dd qui est reconnue par CDate, quels que soient vos parametres régionnaux (pas de confusion entre le 9 Janvier et le premier septembre)
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut,
si Val("1,5") ne fonctionera pas, ou est le 4x4
si la source de données ne dépend pas de soi ?
il y' aura donc toujours quelque chose à prendre
en considération et c' est donc pareil  pour tout...


Mais bonne analyse toutes foise surtout en ce concerne les dates.

PS :  le vert c' était juste pour une heure :-)


<hr />
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
c'estcomme tout, effectivement...

Val est la seule fonction du lot qui, pour une valeur donnée va renvoyer toujours la même chose, quelques soient les paramètres régionnaux.

CDbl("1,5") fonctionnera chez vous, mais ne fonctionnera pas aux US, par exemple.
Val("1.5"), lui, marchera toujours. D'ou le vif l'interet qu'il y a a enregistrer les infos dans leur forme internationale. (je parle des fichier plats/xml, pas de soucis avec des bases de données correctement typées)

J'ai bossé deux ans sur un logiciel que nous vendions a travers le monde (europe de l'est, etats unis, chine, etc) et je peux te garantir que si on homogénéise pas, on à des erreurs 13, ou des valeurs erronnées lors de l'import export.

c'est un peu la même chose avec Excel. si on exporte des formules, dans le dessein de les importer plus tard, il faut enregistrer les .Formula et non les FormulaLocal :
SUM(A1:A5) et non SOMME(A1:A5)

la Formula sera toujours comprise, quelle que soit la langue et les parametres regionnaux du poste (important pour l'item 'separateur de liste' qui indique le separateur des parametres sous excel)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour Renfield ,
Convaincant . Et pour ma part je suis canvaincu.
Jusqu' à présent j' étais pas très partisan de val() surtout que
je travaille exclusivement sur BD.
Mais Val(), Je connaissais quand je faisais du Pascal et du Clipper.
Toujours est il que vu sous cet angle là, on ne peut qu' adhèrer.
Bonne journée.