static_cast による丸め ? 質問する

static_cast による丸め ? 質問する

これを尋ねるのは本当に馬鹿げていると感じます。なぜなら、私は 101 通りの方法を知っているのですが、本に定義されている方法は知らないからです。(注: 私は C++ を知っています)

これまでは、C++ のごく基本的な部分だけを学習しました。基本的には、変数、代入、基本的なキャストについて理解しました。

この本では、問題のこの部分で困っています:

  • ユーザーに小数点数を入力するよう促す
  • その数字を最も近い整数を画面に表示する

だから私は簡単なコードを持っています:

double n;
cout<<"Number: ";
cin >> n;
cout <<endl<<static_cast<int>(n)<<endl;

しかし、これは私にはうまくいかないことに気付きました。常に小数点を切り捨てるので、期待される1.9 -> 2ではなく1.9 -> 1になります。

私が「知っている」ことだけを使ってこれを修正するにはどうすればいいでしょうか? (つまり、round() や if ステートメントなどなしで)

これは基準遵守の問題でしょうか?学校では考えWindows XP 32 ビット版の Visual C++ 2005 で同様のことが起こりましたが、今自宅で同じことをしようとしてもうまくいきません。自宅のコンパイラは OpenBSD 64 ビット版の gcc 3.3.5 です。それとも、この本の誤植でしょうか?

ベストアンサー1

static_cast<int>(n+0.5)

または、static_cast<int>(n >= 0 ? n + 0.5 : n - 0.5)負の値に対するより適切な動作n

おすすめ記事