Je travaillais sur autre chose, mais tout est sorti à zéro, j'ai donc fait cet exemple minimaliste et la sortie est toujours 0.
#include <iostream>
int main(int argc, char** argv)
{
double f=3/5;
std::cout << f;
return 0;
}
Qu'est-ce que je rate?
Il vous manque le fait que 3 et 5 sont des entiers, donc vous obtenez une division entière. Pour que le compilateur effectue une division en virgule flottante, faites de l'un d'eux un nombre réel:
double f = 3.0 / 5;
Ce n'est pas besoin d'être .0
, Vous pouvez également faire 3./5
Ou 3/5.
Ou 3e+0 / 5
Ou 3 / 5e-0
ou 0xCp-2 / 5
ou ... Il suffit qu'un indicateur soit impliqué pour que le compilateur sache qu'il est censé effectuer la division en virgule flottante.
Autre possibilité: double f=double(3)/5
. C'est beaucoup plus de frappe, mais cela ne laisse aucun doute sur ce que vous faites.
Ou utilisez simplement double f=.6
, Qui fait aussi l'affaire ...
essaye ça:
double f = 3.0/5.0;
cela devrait résoudre votre problème
Essayez de mettre un .0
après l'un des diviseurs. Cela les convertira en littéraux à virgule flottante.
Vous utilisez des entiers. Vous pouvez faire beaucoup de choses pour faire doubler vos constantes comme à gauche, mais ce n'est pas bon. C'est difficile à lire et déroutant. Si vous voulez 3 et 5, faites-les 3.0 et 5.0. Tout le monde saura ce que vous voulez dire s'il est obligé de lire votre code. Une grande partie de ce qu'il déclare exige vraiment que vous connaissiez le C/C++ et comment les flotteurs sont stockés pour faire des têtes ou des queues.
Dans le cas, vous enregistrez vos variables génériques avec int
et souhaitez obtenir le rapport sous la forme double
:
using namespace std;
int main()
{
int x = 7;
int y = 4;
double ratio;
ratio = static_cast<double>(x)/static_cast<double>(y);
cout << "ratio =\t"<<ratio<< endl;
}