Connaître le séparateur décimal de votre ordinateur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 970 fois - Téléchargée 59 fois

Contenu du snippet

Quelqu'un a posé cette question dans le forum de VBFRANCE... En effet, pour certaines applications, il est parfois bon de connaître le format de ce séparateur - le point (.) ou la virgule (,). (A coller dans un module)

Source / Exemple :


'DECLARATION API
Public Declare Function GetThreadLocale Lib "kernel32" () As Long
Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Public Declare Function GetLocaleInfo Lib "kernel32" _
   Alias "GetLocaleInfoA" _
  (ByVal Locale As Long, _
   ByVal LCType As Long, _
   ByVal lpLCData As String, _
   ByVal cchData As Long) As Long

'DECLARATION CONSTANTES
Public Const LOCALE_SCURRENCY             As Long = &H14    'symbole monétaire local
Public Const LOCALE_SINTLSYMBOL           As Long = &H15    'symbole monétaire international
Public Const LOCALE_SMONDECIMALSEP        As Long = &H16    'séparateur monétaire décimal
Public Const LOCALE_SMONTHOUSANDSEP       As Long = &H17    'séparateur monétaire des milliers
Public Const LOCALE_SMONGROUPING          As Long = &H18    'groupement monétaire
Public Const LOCALE_ICURRDIGITS           As Long = &H19    '# local monetary digits
Public Const LOCALE_IINTLCURRDIGITS       As Long = &H1A    '# intl monetary digits
Public Const LOCALE_ICURRENCY             As Long = &H1B    'mode positif de la devise
Public Const LOCALE_INEGCURR              As Long = &H1C    'mode négatif de la devise
Public Const LOCALE_IPOSSIGNPOSN          As Long = &H52    'position du signe positif
Public Const LOCALE_INEGSIGNPOSN          As Long = &H53    'position du signe négatif
Public Const LOCALE_IPOSSYMPRECEDES       As Long = &H54    'mon sym precedes pos amt
Public Const LOCALE_IPOSSEPBYSPACE        As Long = &H55    'mon sym sep by space from pos amt
Public Const LOCALE_INEGSYMPRECEDES       As Long = &H56    'mon sym precedes neg amt
Public Const LOCALE_INEGSEPBYSPACE        As Long = &H57    'mon sym sep by space from neg amt
Public Const LOCALE_SENGCURRNAME          As Long = &H1007  'nom anglais de la devise
Public Const LOCALE_SNATIVECURRNAME       As Long = &H1008  'nom natif de la devise

Public Function GetUserLocaleInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String

   Dim sReturn As String
   Dim r As Long

  'Appel de la fonction en passant la variable locale
  'pour récupérer la taille du buffer du string dont nous avons besoin
   r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
    
  'Si c'est OK..
   If r Then
    
     'On compléte le buffer avec des espaces
      sReturn = Space$(r)
       
     'et nouvel appel en passant la mémoire tampon
      r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
     
     'Si Ok (r > 0)
      If r Then
      
        'r contient la taille de la chaîne de caractères
        'comprenant la terminaison nulle
         GetUserLocaleInfo = Left$(sReturn, r - 1)
      
      End If
   
   End If
    
End Function

Conclusion :


Utilisation:
Dim LCID As Long
LCID = GetSystemDefaultLCID()
Msgbox "Le séparateur décimal est: " & GetUserLocaleInfo(LCID, LOCALE_SMONDECIMALSEP)

--> Voyez les autres constantes pour d'autres informations sur la configuration locale de votre machine

A voir également

Ajouter un commentaire Commentaires
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
le plus court pour obtenir l'info:
Format$(0, ".")
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Bonjour,
ça n'existait pas l'époque! pour vb.Net le snippet est eb cours de validation

http://www.codyx.org/snippet_modifier-separateur-decimale-options-regionales-linguistiques_264.aspx
Messages postés
103
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
14 mai 2010

Bonjour,


En .Net, savez-vous si on peut le changer dans l'application et pas dans la machine ? J'ai lu des choses sur les variables CultureInfo et autres, mais jusqu'à présent rien de concret...


@+

Benoît 'Mutos' ROBIN
http://hoshikaze.net
Messages postés
106
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
23 janvier 2010

après test de vos deux codes : la preuve par 9
voila en considérant qu'avant le test mon séparateur par défaut est ","

TEST 1ere manche :
--------------------
MsgBox (GetUserLocaleInfo(GetSystemDefaultLCID, LOCALE_SMONDECIMALSEP))
> affiche ","
MsgBox (Check_Decimal_Separator)
> trouve le "," demande de changer en "." est renvoie True
MsgBox (GetUserLocaleInfo(GetSystemDefaultLCID, LOCALE_SMONDECIMALSEP))
> affiche ","

A bon mais pourquoi ???

TEST 2e manche :
--------------------
MsgBox (GetUserLocaleInfo(GetSystemDefaultLCID, LOCALE_SMONDECIMALSEP))
> affiche ","
MsgBox (Check_Decimal_Separator)
> affiche True

Donc le changement a bien été prix en compte mais ta fonction Néo ne prend pas le changement en compte ? une raison a cela ?? ou je ne suis pas bien réveillé ?
Messages postés
106
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
23 janvier 2010

tout ca est assez interessant et je crois que cela va changer ma vie !

par contre @wayne :
si le séparateur décimal n'est pas un ".", tu dis le séparateur est un "." voulez vous le changer en "." ??!
Afficher les 8 commentaires

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.