Comment récupérer la valeur des décimales d'une variable de type long ?

robmor Messages postés 4 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 7 juillet 2005 - 7 juil. 2005 à 13:38
Totoroyamada Messages postés 31 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 17 novembre 2005 - 8 juil. 2005 à 14:01
bonjour,
comment pourrais-je récupérer la valeur des décimales d'une variable de type long ? (pour une valeur de 32,56 par exemple, je voudrais récupérer 56 uniquement...)
merci !

8 réponses

guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 1
7 juil. 2005 à 13:58
Bonjour,

Voici un bout de code te permettant de faire ce dont tu as besoin et cela quelque soit le séparateur décimal !

Option Explicit
' Déclaration des librairies nécessaires !
Const LOCALE_SDECIMAL As Long = &HE
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private 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
' Déclaration des fonctions de récupération du séparateur décimal !
Public Function GetUserLocaleInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String
Dim sReturn As String
Dim R As Long
R = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
If R Then
sReturn = Space$(R)
R = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
If R Then
GetUserLocaleInfo = Left$(sReturn, R - 1)
End If
End If
End Function

' Il faut mettre un CommandButton sur la feuille
Private Sub Command1_Click()
Command1.Caption = PartieDecimale(33.56)
End Sub

' Petite fonction qui peut être appelée de partout !
Public Function PartieDecimale(Valeur)
Dim LCID As Long
Dim SymboleDecimal As String
LCID = GetSystemDefaultLCID()
SymboleDecimal = GetUserLocaleInfo(LCID, LOCALE_SDECIMAL)

PartieDecimale = Mid$(Valeur, InStr(1, Valeur, SymboleDecimal, vbTextCompare) + 1)
End Function

Et Voilà !

Y a certainement plus simple mais cela permet aussi de manipuler les librairies pour la gestion des paramètres régionaux !

Bonne Prog

Olivier
0
robmor Messages postés 4 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 7 juillet 2005
7 juil. 2005 à 15:55
merci bien de ton aide; il va falloir que je voie ça de plus près, ça me paraît encore un peu obscur...!
0
Totoroyamada Messages postés 31 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 17 novembre 2005
7 juil. 2005 à 17:18
S'il n'y a que 2 décimales, tu multiplies ton nombre par 100, tu le
convertis en string et tu récupères les deux derniers caractères... et
s'il peut y avoir plus de décimales tu multiplies par 1000, 10000 etc
et tu récupères les 3, 4 etc... derniers caractères...

Comme ça même si y a pas de décimales, tu récupères 0, et tu te fiches des paramètres régionaux...

C'est de la bidouille mais pas besoin d'API ou autre (mais c'est sûr, c'est moins intéressant que la soluce de guilletto)
0
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 1
8 juil. 2005 à 09:06
Salut,

En effet c'est de la bidouille !

C'est la solution que j'utilisais avant !

Seul inconvénient c'est que tu ne sais jamais combien de chiffres il y a après la virgule !

Donc ...... vive les API !

@+

Bonne prog

Olivier
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Totoroyamada Messages postés 31 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 17 novembre 2005
8 juil. 2005 à 10:38
C'est effectivement le problème... Mais par exemple, dans le cas de
l'appli commerciale qu'on développe, on ne va jamais plus loin que 3
chiffres, donc en une ligne on a ça:

Dim MesDecimales As Integer = CType(((MonNombre * 1000).ToString.Substring((MonNombre * 1000).ToString.Length - 3)), Integer)

Mais comme tu dis, vive les API, il est plus intéressant de les manipuler... mais un peu de bidouille n'a jamais tué personne...
0
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 1
8 juil. 2005 à 10:54
Salut Totoroyamada,

Est-ce que ce genre de codage n'a pas pour effet secondaire de TRONQUER la valeur ??

Exemple : 3.157664879 => 3.157 au lieu de 3.158 (étant donné que le chiffre suivant 6 est > à 5) !

Remarque identique pour des nombres négatifs !

Cordialement,

Olivier
0
Totoroyamada Messages postés 31 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 17 novembre 2005
8 juil. 2005 à 11:35
Le but du truc n'est pas de récupérer les X premiers chiffres après la
virgule, mais tous les chiffres... donc pas d'histoire d'arrondi. Dans
le cas présent, pour utiliser ma méthode il faudrait multiplier ton
nombre par 1000000000... et on voit bien là les limites de la
bidouille... ;-)
0
Totoroyamada Messages postés 31 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 17 novembre 2005
8 juil. 2005 à 14:01
(Par contre désolé je viens à peine de m'apercevoir que c'est du VBA alors que j'ai filé du .Net...)
0