salut
j'ai le probléme suivant:
Soit l'exemple suivant:
lors de l'affichage de a au lieu d'avoir a=0.02 j'ai a=0. Comme si il a traité le a comme étant un entier. Comment résoudre ce problème?Code:
1
2
3
4
5 double a; void main(){ a=1/50; }
merci
Version imprimable
salut
j'ai le probléme suivant:
Soit l'exemple suivant:
lors de l'affichage de a au lieu d'avoir a=0.02 j'ai a=0. Comme si il a traité le a comme étant un entier. Comment résoudre ce problème?Code:
1
2
3
4
5 double a; void main(){ a=1/50; }
merci
Salut,
Dans l'expression 1/50, 1 et 50 sont des entiers. Par conséquent, le résultat sera forcément un entier, même si tu places ce résultat dans une variable de type double.
Pour que tu obtiennes la valeur attendue, il faut que tu écrives soit ceci :
ou plus léger :Code:a = static_cast<double>(1)/50
Code:a = 1.0/50
Salut,
Déjà, le code ne devrait pas compiler... du moins, avec un *bon* compilateur bien réglé.
En effet, la fonction main() doit - obligatoirement - renvoyer un entier (qui vaut 0 en cas d'exécution complète réussie, 1 en cas d'échec, et - sur *nixoides - 2 en cas d'avertissement).
Aussi, le prototype de la fonction main() devrait être
ou, s'il faut prévoir de fournir des paramètres lors de l'appel de l'exécutable,Code:int main()
En outre, il faut toujours garder en tete que les variables globales, "saymal"... il est vraiment conseillé de les éviter pour autant que faire se peut ;)Code:int main(int argc, char *argv[])
Ceci dit, et pour quand même donner la solution: Pour que la division donne une valeur réelle (float ou double), il faut au minimum que l'un des opérandes (que ce soit le diviseur ou le dividente) soit un réel.
Pour indiquer que la valeur est réellement un réel, le meilleur moyen étant d'ajouter la virgule (en fait, le point, vu que les valeurs sont écrites "à l'anglaise" :D) ;)