Partie entière et partie decimale en VB [Fermé]

Signaler
-
 said -
bonjour,
qui peut m'aider à extraire la partie entière à part
et la partie decimale à part d'un nombre flottant dans un pgr VB,
merci pour votre aide.

7 réponses

Dec = (Valeur - Int(Valeur))
Entier = Int(Valeur)

voici la syntaxe exacte avec Valeur = nb flottant
55
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Bonjour,

Cette méthode fonctionne en général, mais pour des nombres trop grands cela ne fonctionnera pas
Integer : Contient des entiers 32 bits (4 octets) signés dont la valeur est comprise entre -2 147 483 648 et 2 147 483 647.

Si le nombre a tester est en dehors de ces limites, il faut trouver une autre solution (que je cherche actuellement :S)
merci infiniment pour votre aide
val2=(val1-int val1)"décimale"
val3=int val1"partie entière
syntaxe à vérifier
Messages postés
121
Date d'inscription
vendredi 17 octobre 2003
Statut
Membre
Dernière intervention
14 octobre 2016
9
Trois autres solutions (mais qui fonctionnent celles-là):

Mettre 3 boutons sur la frame:

Private Sub Command_Click()
Dim nb As Double
Dim a1 As String
Dim dec_nb As String
Dim ent_nb As String

nb = 42653.6207986111

a1 = CStr(nb)

dec_nb = CDbl(Right(a1, Len(a1) - InStr(1, a1, ",")))
MsgBox dec_nb ' = "6207986111"

ent_nb = CDbl(Left(a1, Len(a1) - (Len(a1) - InStr(1, a1, ",") + 1)))
MsgBox ent_nb ' = 42653

End Sub


Ou (Universel pour répondre à rindher)

Private Sub Command1_Click()
Dim nb As Double
Dim a As String
Dim dec_nb As String
Dim ent_nb As String

nb = 42653.6207986111

a = CStr(nb)

dec_nb = Right(a, Len(a) - Len(CStr(Int(a))) - 1)
MsgBox dec_nb ' = "6207986111"

ent_nb = Left(a, Len(a) - Len(dec_nb) - 1)
MsgBox ent_nb ' = 42653

End Sub


Ou pour faire scientifique et Universel (résultats différents!):

Private Sub Command2_Click()
Dim nb As Double
Dim a As String
Dim dec_nb As Double
Dim ent_nb_s As String
Dim ent_nb As Double

nb = 42653.6207986111

ent_nb = Int(nb)
MsgBox ent_nb ' = 42653

ent_nb_s = nb - Int(nb)

dec_nb = ent_nb_s * 10 ^ (Len(ent_nb_s) - 2)
MsgBox dec_nb ' = 620798611096689


End Sub

R = A / B
Pos = InStr(1, R, ",") ' recherche de l'existence de la virgule dans R
If Pos <> 0 Then ' si la virgule existe
E= CInt(Left(R, Pos - 1)) ' alors récupère les chiffres avant la virgule (partie entière)
Tai1 = Len(R) - (Pos + 1) ' calcul de la longueur après la virgule
D = CInt(Right(R, Tai1)) ' récupère les chiffres après la virgule (partie décimale)
End If
Tai1 = Len(R) - (Pos + 1) est egal à 0
donc on ne peut pas recuperer les chiffres apres la virgule,la formule exact est :
Tai1 = Len(R) - (Pos)
En plus c'est vraiment débile comme méthode car le bon fonctionnement de la fonction dépend des paramètres régionnaux du PC... Sur un PC américain par exemple, le séparateur est le "." ...
Après, c'est peut-être la manière la moins intelligente d'arriver à ce genre de résultat : passer par une conversion en chaine puis en num... Heureusement que les processeurs actuels vont vite, mais il suffit de vouloir passer ce traitement 1000000 de fois pour se rendre compte de combien c'est lent et lourd pour le PC...
Essayez de donner du code qui soit un peu sérieux...
Messages postés
1
Date d'inscription
mardi 11 juin 2013
Statut
Membre
Dernière intervention
11 juin 2013

Private Function IntDec(ByVal strch As String, ByVal valeur() As Integer) As Integer()
Dim Pos As Integer = InStr(strch, ".") ' recherche de l'existence du point dans R
If Pos <> 0 Then ' si le point existe
valeur(0) = CInt(Int(strch)) ' alors récupère les chiffres avant le point (partie entière)
valeur(1) = CInt(CStr(strch).Substring(Pos, 2)) ' récupère les chiffres après le point (partie décimale)
Else
valeur(0) = CInt(Int(strch))
valeur(1) = 0
End If
Return valeur
End Function
NombreFlottant = 2.11
Dim Extraire() As String
Extraire = Split(NombreFlottant, ",", 2)
MsgBox (Extraire(0)) ' pour extraire l'entier
MsgBox (Extraire(1)) ' pour extraire les décimales

C'est simple comme bonjour..
tu mes un 5