Bonjour,
Est-il possible de limiter le nombre de décimals d'un float lors d'un scanf ou d'un atof ?
J'ai essayer avec "%.2f" comme en affichage mais ça ne marche pas : /
Ou bien peut-on faire ça directement à la création de la variable ?
Merci
Bonjour,
Est-il possible de limiter le nombre de décimals d'un float lors d'un scanf ou d'un atof ?
J'ai essayer avec "%.2f" comme en affichage mais ça ne marche pas : /
Ou bien peut-on faire ça directement à la création de la variable ?
Merci
Et bien non.
Pas avec les fonctions standard d'accès aux flux d'entrée/sortie (stdio.h).
Tout ce que tu peux faire, c'est permettre à un utilisateur d'entrer une chaîne de caractères (gets est ce qu'il y a de mieux pour faire ça) et ensuite (lorqu'il a appuyé sur ENTRÉE) vérifier si cette chaîne répond à tes attentes.
Si tu tiens vraiment à faire ce que tu dis, il faut prendre la main à chaque caractère saisi ce qui se fait de manière non standard avec les fonctions de gestion de la console (conio.h sous windoz).
[WinXP sp3 / Visual 2005 / Eclipse Ganymede / Python 2.6]
Hadrien
ah ....
tant pis, je vais essayer de contourner le problème ne multipiant par 1000 et en castant en int alors : /
Merci de l'info
Tu peux très bien contourner le probleme (tout du moins pour le scanf)
en utilisant un tableau de char ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 float valeur; char decim[1]; //je ne suis pas certain du codage du scanf :s scanf("%d.%c%c",&valeur,&decim[0],&decim[1]); //passe les décimal de caractere en valeur (pour ASCII only) //fonction atoi(); si tu veux plus de portabilite //dixaine decim[0]-=0x30; decim*=10; //unite decim[1]-=0x30; //ajoute les décimal a ton float valeur*=100; valeur=valeur+decim[0]+decim[1]; valeur= valeur/100;
ah, je vois ce que tu veux faire ...
que signifie 0x30 stp ?
sinon quitte à bidouiller, j'ai préférer multiplier par 1000 et caster en int
merci pour l'idée
tu peux toujours le faire...
Qu'est-ce qu'un float :
une partie entière et une partie décimale..
Il suffit que tu déclares 2 entiers. Et que tu saisisses par bouts ta chaîne... Avec des chaînes adaptées...
Tu veux un xxxxxxx.yy ?
Tu déclares une chaîne de 8 (pour xxxxxxx) et une chaîne de 3 (pour yy).
C'est pas pratique, mais ça se fait
Sinon tu boucles ou tu tronques....
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Et bien en ASCII (je ne sais pas pour les autres) les caractères :
0,1,2,3 à 9 sont codés de la façon suivante
0x30
0x31
0x32...
...
0x39
(sous la représentation hexadécimale)
Donc quand tu va taper un caractère au clavier (compris entre 0 et 9) choper grace au scanf alors tu va retrouver dans ton char quelque chose du style
0x31 (si t'as tapé "1").
Mais toi ce qui t'interesse c'est l'ENTIER qui ce cache derière ce caractère donc tu enlève 0x30 pour avoir 1.
Quelle horreur ..
Quel besoin de coder en hexa pour faire du calcul décimal ????
On vous met n'importe quoi dans la tête...
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Écrire
est plus lisible et plus portable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part decim[0] -= '0';
tu voulais certainement dire fgets.Envoyé par sopsag
To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --
Parceque c'est plus facile de voir une relation entre :
0x30 et 0
0x31 et 1
etc...
que
48 et 0
49 et 1
etc...
Enfin après c'est mon avis hein, mais c'est vrai qu'on peut le faire à coup de décimal.
Mais je vois vraiment pas pourquoi tu fais tout un plat du fait que ce soit en HEXA O.o
Et de toute façon comme l'a dit ssmario2, le -'0' est plus lisible que tout autre -0x30 ou -48
J'en fais pas un plat, mais simplement quà la limite on parle hexa pour parler d'adresses, je veux bien , mais pour quelque chose d'aussi basique que les chiffres, que ce soit en ASCII ou en C, c'est suffisamment simple sans compliquer inutilement..
D'ailleurs :
montre bien que naturellement le PO pense en décimal...
Sinon c'est tout, mais je trouve que, comme on est dans un langage plus évolué que l'assembleur, à quelques très rares exceptions près (masques en particulier), on a aucun besoin de se casser la tête avec lex hexas (les opérations sont pas immédiates, et l'écriture non plus).
Sans plus..
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager