arrondi du Resultat de division
Bonjour,
je souhaite stocker dans une variable de type entier la partie entiere du quotient de la division de 2 nombres de type double. Mais j'ai des problemes d'arrondi.
Dans l'exemple ci-dessous, numerateur est sense contenir 0.6 mais il contient en fait 0.59999, denominateur est sensi contenir 0.2 mais contient 0.200001.
Donc le "forcage de type (int)" me donne 2. La seule technique que j'ai trouvee consiste a utiliser ceil() et floor() mais il y a peut etre plus simple que ce if.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <stdio.h>
#include <math.h>
int main()
{
double numerateur, denominateur, N0;
int q1, q2;
numerateur = 0.6;
denominateur = 0.2;
N0 = numerateur/denominateur;
q1 = (int)N0;
if (N0 - floor(N0) <= 0.5)
{
q2 = floor(N0);
}
else
{
q2 = ceil(N0);
}
printf("N0 = num/denom = %.1f\n",N0);
printf("q1 = (int)N0 = %d\n",q1);
printf("q2 = (ceil or floor)N0 = %d\n",q2);
return 0;
} |
Je vous remercie par avance pour vos suggestions.
Lepapat
PS : si j'initialise directement N0 a 3.0, pas de souci evidemment.
j'ai l'impression que tu es dans une impasse
tu veux diviser 0.6/0.2 soit 3 reste 0
mais tu veux aussi 0.006/0.002 soit 3 reste 0
Et ainsi de suite.
La divison réelle , n'admet pas de reste , c'est un approximation.
En fait peut etre que les nombres que tu cheches sont 6/2 reste 0
En gros ce que je dis ... Ton numerateur et ton denominateur sont des entiers...
Alors ...fabrique des entiers..