1. ホーム
  2. c++

[解決済み] C++:doubleをintに丸めるには?[重複)。

2022-03-06 20:48:23

質問

私はダブル(xと呼ぶ)を持っていて、55のつもりでしたが、実際には54.9999999999943157として保存されていることに今気づきました。

そこで、次のようにすると

double x = 54.999999999999943157;
int y = (int) x;

55ではなく、y = 54!

これには長い間、困惑させられました。どうすれば正しく丸めることができるのでしょうか?

どのように解決するのですか?

コンパイラは常に切り捨てるので、キャストの前に 0.5 を追加するか (if x > 0) または 0.5 を減算してください (if x < 0)。

float x = 55; // stored as 54.999999...
x = x + 0.5 - (x<0); // x is now 55.499999...
int y = (int)x; // truncated to 55

また、C++11 では std::round これは、ボンネットの中で |x| に 0.5 を加えるという同様のロジックを使用していると思われるが(興味があればリンクを参照)、明らかにより堅牢である。

次のような質問があります。 なぜ は、ちょうど55として格納されません。説明については これ stackoverflow の回答です。