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).
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
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.
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....
Partager