Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » BASIC » nombres décimaux en qb4.5

diemaker form
ProgBoarder
Citer Windows XP Firefox 2 - Posté le 09/02/2008 à 07:37
Bonjour,
Je suis nouveau sur ce forum et je n'ai pas trouvé dans les sujets existants.
Mon problème est les nombres décimaux dans un fichier texte.
je fait une variable a$ ="0.79" que je met dans un fichier.txt
je prend cette variable avec:

open "fichier.txt" for input as #1
open "fichier2.txt" for output as #2
input #1, a$
print #2 a#
close

voilà le problème :
la variable a# devient ( .78999999999999999999 )
elle perd son "0" et sa valeur exact de début ??

Si vous avez une solution, .....

D'avance merci.
DMF
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
SFLPMEA
ProgBoarder
RemonterCiter Windows 98 Firefox 2 - Posté le 09/02/2008 à 09:54
(héhé Salutations.

Les masques d'édition sont souvent oubliés, et c'est ce qui explique ta petite mésaventure. De plus, tu n'utilises pas VAL(A$).
Il peut être intéressant de voir ce que contient ton fichier avec EDIT, pour contrôler la valeur de a$.
Ci-dessous, ce que j'aurais écrit :

BOUCLE: CLS
CLOSE : LOCATE 10, 10
INPUT ; "Saisir A$ (0 pour terminer) ", A$
IF VAL(A$) = 0 THEN END
OPEN "fichier.txt" FOR OUTPUT AS #1
PRINT #1, A$
CLOSE
OPEN "fichier.txt" FOR INPUT AS #2
INPUT #2, B$
LOCATE 12, 10: PRINT USING "###.##"; VAL(B$)
SLEEP 5
GOTO BOUCLE

J'espère avoir trouver la solution.
Toujours à ta disposition.

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 09/02/2008 à 11:41
Bonjour et merci pour la réponse rapide,
J'ai utilisé : CSNG(a#)
apparament je n'ai plus que 2 décimales
et c'est bon sauf que le "0" a toujours disparu !
Le principe est que je fait des additions et soustractions de plusieurs variables (nombres décimaux) et que je met le résultat dans la variable a# et ensuite je met le tout dans un fichier texte
Attention, je mets plusieurs types de variables dans le fichier :
print #2, a#; b$; c# ; d; etc ...
ce qui me pose un autre problème que les variables #a ont un espace devant et derrière leur valeur !
alors que le fichier final souhaité est d'avoir des lignes genre :
G0X0.79Y2.57F500 (language iso pour machine CNC)
et actuellement j'ai :
G0X .79 Y 2.57 F500

Votre solution avec "VAL(B$)" ne fonctionne pas avec a#
et le masque non-plus
je ne sais pas si je suis clair ?

Merci d'avance,
DMF
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
SFLPMEA
ProgBoarder
RemonterCiter Windows 98 Firefox 2 - Posté le 09/02/2008 à 13:47
(héhé Salutations.

Je pense que c'est une 'histoire' de masque de formatage et je vais te proposer deux solutions :

'G0X0.79Y2.57F500 (langage iso pour machine CNC)
'et actuellement j'ai :
'G0X .79 Y 2.57 F500
CLS
A$ = "G0X": B# = .79: C$ = "Y": D# = 2.57
E$ = "F": F# = 500
' Solution 1
PRINT A$;
PRINT USING "#.##"; B#;
PRINT C$;
PRINT USING "#.##"; D#;
PRINT E$;
PRINT USING "###"; F#
PRINT "G0X0.79Y2.57F500 (Recherche)"
' solution 2 (plus rapide ?)
MASQUE$ = "&#.##!#.##!###"
PRINT USING MASQUE$; A$; B#; C$; D#; E$; F#

Je préfère la deuxième . . .
Attention, dans le masque de formatage, le ! ne prend en considération que le premier caractère de la chaîne, alors que le & prend la chaîne complète.

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 10/02/2008 à 09:49
Bonjour et encore merci pour l'aide,
pour le masque ce serait l'idéale mais,
il y a un problème avec les variables du type c#
je m'explique :
vd$ = "F1" : pen$ = "M61" : x$ = "X" : c# = .788889 : y$ = "Y" : d# = 123.57
PRINT USING "&&&#.##&#.##" ; vd$ ; pen$ ; x$ ; c# ; y$ ; d#
les variables c# et d# ont un espace devant et derrière la valeur ce qui me
retourne à l'affichage:
F1M61X%0.79Y%123.57
le masque "#.##" se met à droite de la valeur et concerve les espaces à gauche
me les affichant en "%" (question)??
Pas simple mon affaire !
Désolé pour le dérangement.
DMF
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 10/02/2008 à 10:25
Re-bonjour,
je viens de remarquer une chose,
si la valeur de c# est 0.58 avec "#.##" pas de problème
si la valeur de c# est 25.43 avec "#.##" j'ai un % devant la valeur
si la valeur de c# est 0.58 avec "##.##" j'ai un espace devant la valeur
si la valeur de c# est 25.43 avec "##.##" pas de problème
comme mes valeurs c# et d# sont variables, c'est pas simple apparament !
Merci de votre aide,
DMF
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
Francesco
Modérateur
RemonterCiter Linux Firefox 2 - Posté le 10/02/2008 à 10:33
Je propose une autre méthode.
1) Convertir le nombre voulu en chaine de caractère (de mémoire, c'est avec la fonction str$)
2) utiliser les fonctions LTRIM et RTRIM pour supprimer les espaces respectivement à gauche et à droite.
3) Concaténer cette nouvelle chaine de caractère avec ce que tu veux.


chaine$ = str$(nombre#)
chaine$ = LTRIM$(RTRIM$(chaine$))
PRINT "F1M61" + chaine$ +"etc...."

Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 10/02/2008 à 11:32
Bonjour Francesco et merci,

La formule est bonne !

Le masque de SFLPMEA est bon avec VAL( c$ )

Si on met le masque "#.##" ; c$ ( type incompatible !)
mais avec masque "#.##" ; VAL( c$ ) ( ok !! super !! )

Merci à tout les deux pour ces infos précieuses !
DMF
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
Francesco
Modérateur
RemonterCiter Linux Firefox 2 - Posté le 10/02/2008 à 12:02
Mais de rien (clein d'oeil)
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 10/02/2008 à 13:17
SFLPMEA, FRANCESCO AUX SECOURS !!

J'ai parlé trop vite !

si la valeur de c$ est " .58 " avec "#.##" résultat " 0.58 " ok
si la valeur de c$ est " -.58 " avec "#.##" résultat " -.58 " pas ok
si la valeur de c$ est "5.43 " avec "#.##" résultat " 5.43 " ok
si la valeur de c$ est "-5.43 " avec "#.##" résultat " %-5.43 " pas ok
si la valeur de c$ est "25.43" avec "#.##" résultat " %25.43 " pas ok
si la valeur de c$ est "425.43" avec "#.##" résultat " %425.43 " pas ok

comme mes valeurs c$ et d$ sont variables de -2000.00 à 2000.00
, c'est pas simple!

encore merci
DMF
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
Francesco
Modérateur
RemonterCiter Linux Firefox 2 - Posté le 10/02/2008 à 13:44
J'ai réalisé une petite fonction qui devrait faire ce que tu demande :



Wall (139) : Afficher le code source - Ouvrir dans une nouvelle fenêtre


Est-ce que cela te conviens ?
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,099 s - Crédits - Stats
1 connecté