2016-10-11 22 views
3
double num1=3.3; 
double num2=3.8; 

//print output and round off 
cout<<floor(num1+0.5)<<endl; 
cout<<floor(num2+0.5)<<endl; 

私のタスクは、最初の数字を丸めると、整数にキャストすることである:ラウンドオフ後NUM1とNUM2の出力は、それぞれ3.0000004.000000であるべきです。私はそれをintにキャストして、aboveの回答を得るにはどうすればいいですか34オフ丸め整数として書き直す

+0

C++ 11以降では、['std :: round'](http://en.cppreference.com/w/cpp/numeric/math/round)を使用することもできます。 – vsoftco

答えて

2

cout<<floor(num1+0.5)<<endl;は、3.0を印刷します。あなたはもっとここにキャストする必要はありませんが、あなたはそれをしたい場合は、static_castを使用します。static_casthereについて

double num1=3.3; 
double num2=3.8; 

// to round off 
int num1_as_int = static_cast<int>(floor(num1+0.5)); 
int num2_as_int = static_cast<int>(floor(num2+0.5)); 

//print output 
cout<<num1_as_int<<endl; 
cout<<num2_as_int<<endl; 

もっと、なぜあなたはそれを使用する必要があります代わりに、C-スタイルはhereをキャスト。

+0

ya、ありがとうエラーを指摘して、私は質問を修正しました。 static_cast を行うことで、直接鋳造を適用することを意味しますか? 私の講師は、直接打ち込みを適用して私に言ったので切り捨てエラー – Sylar

+0

につながるだけで、私は整数にキャストすることを望んでいます。例えば。 '-2.6 + 0.5'は' -2.1'、 'static_cast (-2.1)'は打ち切り '-2'、' floor(-2.1) 'は切り捨てられます。 )は '-3.0'(' static_cast (floor(-2.1)) 'は' -3'になります)。私は自分の答えを編集する – wasthishelpful

3

変数intを宣言し、floorの結果を割り当ててからintを出力できます。 intへの割り当てがそれを暗黙的に行うので、床はもはや必要ではない。

int i1 = num1+0.5;
cout<<i1<<endl;

あなたは結果を破棄しているとして、あなたの現在のコードでは、floor()は、実際に、どのような方法で助けていないことに注意してください。 floorはそのパラメータを変更するのではなく、その結果を返します。あなたはそれを何にも割り当てていません。たとえば、
num1 = floor(num1+0.5);
を使用し、次にnum1に結果を含めることができます。

+0

これまでと同じことをやったことがありますが、私の講師は直接キャスティングを適用すると切り捨てエラーが発生するので、最初に四捨五入してintにキャストしてください – Sylar

関連する問題