Fonction approximation

Résolu
Bonjour,

je suis confronté à un problème, je souhaite faire une fonction qui me permet d'approximer les valeurs de mon programme.

mais le problème est qu'il ne le fait pas sur toute les valeurs, il le fait sur certain mais pas sur d'autre et je comprend pas où est le problème
voici ma fonction
Function approximation_2(coord_I As String) As String

Dim approxi_2 As Double

If Val(coord_I) < -0.0006 Then
approxi_2 = 0.0005

If Val(coord_I) > -0.0006 Then
approxi_2 = 0.0005

End If
End If

coord_I = Str(Val(coord_I) + approxi_2)
'coord_I = Mid(coord_I, 1, InStr(coord_I, ".") + 3)

If Right(coord_I, 2) = "0" Then
coord_I = Left(coord_I, Len(coord_I) - 2)
End If

approximation_2 = coord_I

End Function
quelqu'un pourrai venir à mon secour s'il vous plait

4 réponses

  1. Bonjour

    Le début n'est pas très clair (RQ1) ni correct (RQ2)

    If Val(coord_I) < -0.0006 Then
    approxi_2 = 0.0005
    If Val(coord_I) > -0.0006 Then
    approxi_2 = 0.0005
    End If
    End If

    RQ1. En bref ça donne

    si Val(ccoor_I) différent de -0.0006
    alors approxi_2=0.0005
    sinon approxi_2=0 puisque ce cas n'est pas traité

    RQ2. il manque un end if avant le 2° si et il y en a un entrop après le 2° si

    RQ3. Peux tu décrire ce que la fonction approximation_2 est censée réaliser

    Cdlmnt
    1. la fonction approximation est censée me donner un nombre arrondi c-a-d si j'ai un nombre qui est de 1.0000000000332E-4,
      avec cette fonction approximation je suis maintenant censé avoir 0.0
      ne plus trainer trop de chiffre.
      mais pour l'instant c'est pas le cas avec ma fonction actuelle j'obtiens 1.0
      en somme je souhaite faire une fonction qui me permet d'avoir des nombres approximatif, ne plus trainer tout les nombres après la virgule.

      merci pour votre aide
  2. Pourquoi ne pas utiliser la fonction round, éventuellement combinée avec str et val dans le cas où les valeurs sont des chaines de caractères
    n est le nombre de chiffres après la virgule maxi désiré

    Dim s as Double, n as Byte, approx_1 as Double
    approx_1 = Round(s, n)

    Dim s as Double, n as Byte, approx_2 as String
    approx_2 = Str(Round(s, n))

    Dim s as String, n as Byte, approx_2 as String
    s = Replace(s, ",", ".")
    approx_3 = Str(Round(Val(s), n))

    Cdlmnt
    1. De rien

      Je suppose que tu as vu l'erreur ici approx_3 au lieu de approx_2 dans la troisième procédure

      Dim s as String, n as Byte, approx_3 as String
      s = Replace(s, ",", ".")
      approx_3 = Str(Round(Val(s), n))

      Si c'est fini, peux tu mettre le sujet à Résolu (en haut à droite de ton premier message)

      Bonne fin de journée