begin process at 2012 02 17 11:21:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

 > UN CDBL QUI GERE LES OPTIONS REGIONAL CONCERANT LE SEPARATEUR DECIMAL

UN CDBL QUI GERE LES OPTIONS REGIONAL CONCERANT LE SEPARATEUR DECIMAL


 Information sur la source

 Description

j'ai des machine paramétré avec le '.' en séparateur décimal, d'autre avec une ','.
J'ai aussi des données entré avec des '.' ou des ','.
j'ai donc crée un fonction de conversion en double qui s'affranchit de se séparateur.
attention cette fonction ne gère pas le séparateur des milliers.

Source

  • ' Fonction de conversion en double personnalisé
  • Public Function MyCDbl(str As String) As Double
  • 'on remplace le . ou la , par le separateur decimal en vigueur
  • Dim strt As String
  • Dim Sep As String
  • Dim i As Integer
  • If IsNumeric(str) Then
  • 'La machine sait déjà le convertir alors go !!
  • MyCDbl = CDbl(str)
  • Else
  • 'je trouve le séparateur de la machine
  • Sep = Mid(Format(1 / 2, ""), 2, 1)
  • 'je recherche le séparateur dans la chaine
  • Select Case Sep
  • Case "."
  • i = InStr(1, str, ",")
  • Case ","
  • i = InStr(1, str, ".")
  • End Select
  • If i = 0 Then
  • 'il n y a pas de séparateur dans la chaine , ce n'est donc pas un nombre
  • MyCDbl = Empty
  • Else
  • strt = Mid(str, 1, i - 1) & Sep & Mid(str, i + 1)
  • ' on a remplacer le séparateur décimal
  • If IsNumeric(strt) Then
  • 'gagné , c'est un nombre !!!
  • MyCDbl = CDbl(strt)
  • Else
  • 'on revoit empty, je ne sais pas le convertir
  • MyCDbl = Empty
  • End If
  • End If
  • End If
  • End Function
' Fonction de conversion en double personnalisé

Public Function MyCDbl(str As String) As Double
'on remplace le . ou la , par le separateur decimal en vigueur
    Dim strt As String
    Dim Sep As String
    Dim i As Integer

    If IsNumeric(str) Then
        'La machine sait déjà le convertir alors go !!
        MyCDbl = CDbl(str)
    Else
        'je trouve le séparateur de la machine
        Sep = Mid(Format(1 / 2, ""), 2, 1)
        'je recherche le séparateur dans la chaine
        Select Case Sep
        Case "."
            i = InStr(1, str, ",")
        Case ","
            i = InStr(1, str, ".")
        End Select

        If i = 0 Then     
            'il n y a pas de séparateur dans la chaine , ce n'est donc pas un nombre 
            MyCDbl = Empty
        Else
            strt = Mid(str, 1, i - 1) & Sep & Mid(str, i + 1)
            '  on a remplacer le séparateur décimal
            If IsNumeric(strt) Then
                'gagné , c'est un nombre !!!
                MyCDbl = CDbl(strt)
            Else
                'on revoit empty, je ne sais pas le convertir
                MyCDbl = Empty
            End If
        End If
    End If

End Function

 Conclusion

ce code me sert deja pas mal ...


 Sources de la même categorie

Source avec Zip Source avec une capture MASQUE DE SAISIE NUMÉRIQUE par acive
Source avec Zip Source .NET (Dotnet) COMPTEUR DE NOMBRE DE MOTS DANS UN TEXTE par alpha5
Source avec Zip Source avec une capture HM - BLOCNOTE par hassenmajor
Source .NET (Dotnet) [VB.NET] CLASS DE COLORATION SYNTAXIQUE "ON THE FLY" par huzima
Source avec Zip Source avec une capture PERSONNALISEZ VOS BOÎTES DE MESSAGE (X)HTML par medjahedScript

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture POINT ET VIRGULE EN VB6 par APAT
Source avec Zip Source avec une capture Source .NET (Dotnet) SÉPARATEUR DÉCIMAL DES NOMBRES. par christoni
Source avec Zip VIRGULES <=> POINTS, REMPLACE DANS FICHIER PAR DLL par BruNews
Source avec Zip Source avec une capture FORCER LE "." POINT COMME PARAMÈTRE DÉCIMAL DANS LES PARAMÈT... par cuq
CONNAÎTRE LE SÉPARATEUR DÉCIMAL DE VOTRE ORDINATEUR par Neo.balastik

Commentaires et avis

Commentaire de Renfield le 17/12/2008 15:10:16 administrateur CS

trop de code...

soit c'est un numérique,
soit c'est un format international et il faut alors utiliser Val

pas besoin de manipuler ta chaîne:

Public Function MyCDbl(str As String) As Double
    If IsNumeric(str) Then
        'La machine sait déjà le convertir alors go !!
        MyCDbl = CDbl(str)
    Else
        MyCDbl = Val(str)
    End If
End Function

Commentaire de Nic0s le 18/12/2008 07:53:52

je ne connaissais pas la fonction val.
Merci de cette info !!!

Commentaire de Renfield le 18/12/2008 08:16:24 administrateur CS

pas de soucis.
En fait, beaucoup font un Replace ou ce genre de manipulation...
c'est dangereux...

Commentaire de marcA le 18/12/2008 14:48:31

Bonjour,

Avec le symbole décimale sur la "," et le symbole de groupement des chiffres en ".", Isnumeric ("3,5"), et Isnumeric (3.5) fonctionnent tous les deux. On ne peut pas utiliser Isnumeric pour récupérer la valeur.
Val ("3,5") donne 3.0
Val ("3.5") domme 3.5 (correct)
Par contre, Cdbl("3,5") donne 3.5 (correct)
et Cdbl("3.5") donne 35.0.


personellement, je fais quelque chose ainsi (et je n'ai jamais eu de problème pour le moment)
Ma fonction est faite pour des singles.
J'utilise le fait que quand on fait un Val, si le symbole ne plait pas à .NET , la partie décimale est perdue, et dans l'autre cas, on garde la partie décimale. La valeur dont le string est la plus longue est la bonne valeur.

Public Function ChgSng2(ByVal astr_Val As String) As Single
        '  If InStr(zahl, ",") Then
        '    CHGSNG = CSng(zahl)
        '  Else
        '    CHGSNG = CSng(Val(zahl))
        '  End If
        Dim a, B As Single

        a = CSng(Val(Replace(astr_Val, ".", ",")))
        B = CSng(Val(Replace(astr_Val, ",", ".")))

        If a.ToString.Length > B.ToString.Length Then
            Return a
        Else
            Return B
        End If

    End Function


On peut aussi utiliser la valeur suivante en .NET

Public KeyDecimal As Char = CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)
Puis, on fait un replace de l'autre symbole par celui ci
Je n'ai jamais pu tester cette méthode.

Commentaire de l0r3nz1 le 31/05/2010 15:10:19

Bonjour,

un problème se pose pour les nombres supérieur a mille
car 1 000,1 en français = 1.000,1 aux USA = 1,000.1 en belgique

Commentaire de marcA le 31/05/2010 15:32:48

Bonjour,

C'est normal, ces fonctions ont pour but de corriger des erreurs d'encodage pour les clients qui ne respectent pas les paramètres régionaux (par exemple un client dit que la virgule est utilisée comme séparateur des décimales mais utilise le point an réalité.
Dans votre cas, les deux symboles sont utilisés donc ces fonctions sont inutilisables.
Si les paramètres régionaux de l'utilisateur sont respectés, un simple Cdbl est suffisant.

Commentaire de Renfield le 31/05/2010 23:32:23 administrateur CS

A noter, marcA, qu'il FAUT enregistrer les donnees en un format independant des parametres regionnaux

donc bien avec un . comme separateur decimal

les parametres regionnaux ne sdoivent exclusivement servir qu'a la representation textuelle des donnees, a destination des utilisateurs, a l'affichage ou a l'impression.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

récupérer le séparateur décimal [ par yann1 ] Je cherche à réculérer le séparateur décimal de la machine (celui que l'on met dans les paramètres réginaux, format nombres)Merci Pb avec le séparateur décimal des paramètres régionaux [ par gagagogos ] Ayant crée un exe faisant aditions et soustraction et mettant dans un fichier mémoire le résultat.Pourquoi lorsque j'installe le programme sur un autr Séparateur Décimal URGENT!!!!! [ par xavier77 ] Salut à tous, J'utilise VB5 pour développer et Btrieve pour stocker mes données. Lors de l'exécution de mon prog, j'ai souvent des Erreur 13 lorsque j Problème csv Excel [ par lourdo ] Bonjour,avec Excel 97, je désire exporter par macro le contenu de mon workbook sous un format csv avec séparateur ";".En utilisant le menu fichier|sau séparateur décimal et base de registre [ par bl5730 ] Dans un programme Excel (VBA) lorsque je change la base de registre pour modifier le séparateur décimal, le changement ne prend lieu qu'au redémarrage API Séparateur décimal [ par xavier77 ] salut, J'aimerais savoir s'il est possible de changer le séparateur décimal. J'arrive à le récupérer avec les API GetSystemDefaultLCID et GetUserLocal séparateur décimal entre vba et access [ par seblh ] Bonjour, j'ai un petit problème entre access et vba.En vba, j'éxécute une requête de mise à jour ou alors d'insertion d'enregistrement. Le problème c' msflexgrid, nombre décimal à 2 chiffres après la virgule [ par SANFER ] comment afficher le resultat a 2 chiffres apres la virgule d'un calcul dans une cellule de msflexgrid ogp2 SQL Insert into de nombre décimal [ par GIRIB ] Comment insérer un nombre décimal par une instruction insert into quand le séparateur décimal est une virgule ?Exemple : insert into Table1(Champ1) va NT4: Séparateur Décimal session fermée [ par webcyril ] Hello,Sous NT4, j'ai une application VB6 qui fonctionne avec séparateur décimal . (point) et shortdate 'dd/mm/yyyy'.Session ouverte sous mon compte NT


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,201 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales