web-dev-qa-db-ja.com

C ++の除算が期待どおりに機能しない

私は何か他のことに取り組んでいましたが、すべてがゼロとして出てきたので、この最小限の例を作成しましたが、出力はまだ0です。

#include <iostream>

int main(int argc, char** argv)
{
  double f=3/5;
  std::cout << f;
  return 0;
}

私は何が欠けていますか?

31
Psirus

3と5は整数であるという事実が欠落しているため、整数の除算が行われます。コンパイラーで浮動小数点除算を実行するには、そのうちの1つを実数にします。

 double f = 3.0 / 5;
50

必要が_.0_でなくても、_3./5_または_3/5._または_3e+0 / 5_または_3 / 5e-0_または_0xCp-2 / 5_または...必要なのは、コンパイラが浮動小数点として除算を実行することになっていることを認識するために必要なインジケータのみです。

別の可能性:double f=double(3)/5。それははるかにタイピングですが、あなたがやっていることに疑いの余地はありません。

または、単に_double f=.6_を使用します。

17
leftaroundabout

これを試して:

double f = 3.0/5.0;

これで問題が解決するはずです

9
sergio

.0約数の1つの後。これは、それらを浮動小数点リテラルに変換します。

5
Diego Sevilla

整数を使用しています。 leftaroundabout状態のように定数を2倍にする多くのことができますが、それは良くありません。読みにくくて混乱しやすいです。 3と5が必要な場合は、3.0と5.0にします。コードを読むことを余儀なくされた場合、誰もがあなたの意味を知っているでしょう。彼/彼女が述べていることの多くは、C/C++と、フロートがどのように頭や尾を作るためのストレージであるかを知る必要があります。

2
Joe Tyman

場合は、intを使用してジェネリック変数を保存し、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