Comment récupérer la valeur des décimales d'une variable de type long ?
robmor
Messages postés4Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention 7 juillet 2005
-
7 juil. 2005 à 13:38
Totoroyamada
Messages postés31Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention17 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 !
A voir également:
Comment récupérer la valeur des décimales d'une variable de type long ?
guilleto
Messages postés256Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention20 mars 20131 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 !
Totoroyamada
Messages postés31Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention17 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)
Totoroyamada
Messages postés31Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention17 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...
Totoroyamada
Messages postés31Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention17 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... ;-)