Partie entière et partie decimale en VB

tiger -  
 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

  1. abc
     
    Dec = (Valeur - Int(Valeur))
    Entier = Int(Valeur)

    voici la syntaxe exacte avec Valeur = nb flottant
    55
    1. spos
       
      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)
      0
    2. said
       
      merci infiniment pour votre aide
      0
  2. gator
     
    val2=(val1-int val1)"décimale"
    val3=int val1"partie entière
    syntaxe à vérifier
    8
  3. Chrysostome Messages postés 121 Date d'inscription   Statut Membre Dernière intervention   14
     
    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
    2
  4. Son Altesse
     
    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
    0
    1. initie
       
      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)
      0
    2. rindher
       
      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...
      0
    3. ???
       
      ?????
      0
    4. !!!!
       
      !!!!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Echati Said Messages postés 1 Statut Membre
     
    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
    0
  7. mustaphone
     
    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..
    0