Probleme avec exposants

Résolu
fabientoupeti Messages postés 9 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 14 juin 2007 - 17 avril 2007 à 13:04
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 18 avril 2007 à 10:00
bonjour,
comme le dit le sujet j'ai un problème avec le e de exposant et un fichier texte.
j'utilise VB en macro avec CATIA (logiciel de CAO) donc je ne peux et je ne veux pas utiliser excel.
Pour cerner le sujet:
j'ai un fichier texte comportant 20000 env. avec en 1º colonne des valeurs allant de 0 à 100 aléatoire sauf 5, 10,15...
je lis ce fichier ligne à ligne dès que je repère un 5 je stocke le resultat d'une operation sur les colonnes 4 et 5 dans un nouveau fichier txt, on va l'appeler sum5.txt.
ensuite dans sum5.txt qui comporte une colonne avec sur chaque ligne une valeur differente, je repere la valeur maximale de  sum5.txt et je la stocke dans la variable max5

mais voilà il y a un truc que je ne comprends pas.
quand je fais mes operations sur mes colonnes 4 et 5  tant que le resultat  est  0,** la valeur dans mon fichier texte (sum5.txt) s'ecrit comme cela (0,**)
par contre quand mon resultat est 0,0** la valeur de mon fichier texte (sum5.txt) s'écrit *,**E-2

et part la suite j'ai un probleme pour trouver la valeur maximale ( le E n'est pas considéré comme exposant).

Comment puis je faire pour régler ce problème?
est ce que ça peut venir du fait que je n'ai pas préciser le type de ma variable d'operations?
Si c'est ça quels types dois-je préciser

Merci d'avance

fabientoupeti
A voir également:

7 réponses

fabientoupeti Messages postés 9 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 14 juin 2007
17 avril 2007 à 16:06
Merci pour ta rapidité de réponse, c'est vraiment cool c'est forum.
c'était pour te dire que j'avais continué à chercher de mon côté et j'ai fini par trouver, en fait j'ai utiliser tout simplement la fonction Round avec un nombre de decimal et le tour est joué, je n'ai plus d'exposant et je peux comparer mes valeurs obtenus
j'ai utilisé Round juste après le résultat de l'opération de mes 2 colonnes.

voilivoilou
merci encore pour ton aide

Fabientoupeti
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
17 avril 2007 à 14:58
Bonjour,
Tu écrit donc tes fichier grace à un code VB. Connais tu le fonction format? Peut être pourais tu t'en servir à l'écriture :
format(Valeur,"0.0")
Par contre attention le nombre de 0 apprés le point est important c'est ta présision ce qui veut dire que si tu fais :
format(12.12,"0.0")
Le fonction vas te sortire un 'truc' du genre 12,1 (je dis 'truc' car si c'est un point une virule ou autre séparateur décimal dépand de la configuration régional de windows) Si non tu teste le nombre de décimal que contiens ta valeur et tu crée ta chaine format en fonction.
Pour tester le nombre de décimal :

(à mettre dans un module)
Public Function NombreDec(ByVal Valeur As Double) As Long
Dim compteur As Integer
Dim TemponValeur As Double
TemponValeur = Valeur
Do While TemponValeur > 0
    compteur = compteur + 1
    TemponValeur = (TemponValeur - CInt(TemponValeur)) * 10
Loop
NombreDec = compteur - 1
End Function

du coup le format serais fais comme ça :
format(Valeur,"0." & string(NombreDec(Valeur),"0"))

Tien moi au courant si ça fais ce que tu veux.
Amicalement
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
17 avril 2007 à 15:06
Heeeeeeee, HOULA je me suis tropé (bon pas de grand chose mais bon)
Au lieu de "cint" il faux "Fix" si non tu rique des problèmes dù au arrondie. Ca donne donc :

Public Function NombreDec(ByVal Valeur As Double) As Long
Dim compteur As Integer
Dim TemponValeur As Double
TemponValeur = Valeur
Do While TemponValeur > 0
    compteur = compteur + 1
    TemponValeur = (TemponValeur - Fix(TemponValeur)) * 10
Loop
NombreDec = compteur - 1
End Function

Voili voilou
Amicalement
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
17 avril 2007 à 15:21
Heeeeeeeee, je viens de tester plus en détail la fonction que je t'ai founis et elle ne semble pas bien marché chez moi avec la valeur "12.02". C'est du à des imprésision de VB sur les double par contre elle semble ne pas avoir de problème si la valeur est inférieur à 1.
De plus ça ne marchais pas si le valeur est négative, voila la version débugé :

Public Function NombreDec(ByVal Valeur As Double) As Long
Dim compteur As Integer
Dim TemponValeur As Double
TemponValeur = abs(Valeur)
Do While TemponValeur > 0
    compteur = compteur + 1
    TemponValeur = (TemponValeur - Fix(TemponValeur)) * 10
Loop
NombreDec = compteur - 1
End Function

Amicalement
0

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

Posez votre question
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
17 avril 2007 à 15:25
Bon ce coup ci c'est bon (j'ai contouné ce problème de VB)
<hr size="2" width="100%" />Public Function NombreDec(ByVal Valeur As Double) As Long
Dim compteur As Integer
Dim TemponValeur As Double
TemponValeur = Abs(Valeur)
Do While TemponValeur > 0
    compteur = compteur + 1
    TemponValeur = (CDec(TemponValeur) - CDec(Fix(TemponValeur))) * 10
Loop
NombreDec = compteur - 1
End Function
<hr size="2" width="100%" />
Amicalement
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
17 avril 2007 à 16:16
Pense à valider ta réponse si ton problème est
résolu (ça permet à d'autre d'en profité et évite de perdre son temps à lire
des topic résolut)

Par contre avec ta fonction round tu risque de perdre de la précision mais si
ça n'à pas d'importance alors...



Peut être A+
Amicalement
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
18 avril 2007 à 10:00
Pense à valider la réponse qui à résolu ton problème.
Pour ça tu te log puis tu à un bouton "Réponce acceptée".
Merci
Amicalement
Pensée "Réponce acceptée"
0
Rejoignez-nous