web-dev-qa-db-fra.com

La division en C ++ ne fonctionne pas comme prévu

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?

31
Psirus

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;
50
Neil Butterworth

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

17
leftaroundabout

essaye ça:

double f = 3.0/5.0;

cela devrait résoudre votre problème

9
sergio

Essayez de mettre un .0 après l'un des diviseurs. Cela les convertira en littéraux à virgule flottante.

5
Diego Sevilla

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.

2
Joe Tyman

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;
}
0
Färid Alijani