UN CDBL QUI GERE LES OPTIONS REGIONAL CONCERANT LE SEPARATEUR DECIMAL

Signaler
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48731-un-cdbl-qui-gere-les-options-regional-concerant-le-separateur-decimal

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
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.
Messages postés
12
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
3 août 2010

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.
Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012

Bonjour,

un problème se pose pour les nombres supérieur a millecar 1 000,1 en français 1.000,1 aux USA 1,000.1 en belgique
Messages postés
12
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
3 août 2010

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.
Afficher les 7 commentaires