2016-10-11 2 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.000000 и 4.000000. Как мне отдать его int, чтобы получить упомянутые выше ответы 3 и 4?Округление и переделке его как целое

+0

Вы также можете использовать ['std :: round'] (http://en.cppreference.com/w/cpp/numeric/math/round) в C++ 11 или более поздней версии. – vsoftco

ответ

2

cout<<floor(num1+0.5)<<endl; будет печатать 3.0. Вам не нужно больше бросать, но если вы хотите сделать это, используйте static_cast:

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; 

Подробнее о static_casthere, и почему вы должны использовать его вместо C-стиле бросает here.

+0

ya, спасибо за указывая на ошибку, я изменил вопрос. но, делая static_cast , это означает, что вы используете прямое литье? мой лектор хочет, чтобы я округлил, а затем только бросил его в int, потому что она сказала мне, применяя прямое литье, приведет к ошибке усечения – Sylar

+0

Она подходит для отрицательных значений. Например. '-2.6' должно быть округлено до' -3': '-2.6 + 0.5' будет' -2.1', а 'static_cast (-2.1)' будет '-2', усечение, а' floor (-2.1) 'будет' -3.0' (и 'static_cast (этаж (-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

 Смежные вопросы

  • Нет связанных вопросов^_^