Округление с static_cast <интервал>?

Я чувствую себя действительно глупым, спрашивая это, потому что я знаю, как сделать это 101 путь, но не способ, которым это определяется в книге. (отметьте, я знаю C++),

До сих пор мы только пробежались через самые основы C++. Так в основном мы знаем переменные, присвоение и основной кастинг.

В книге я испытываю затруднения из-за этой части проблемы:

  • предложите пользователю вводить десятичное число
  • Преобразуйте то число в ближайшее целое число и распечатайте его на экран

Таким образом, у меня есть тривиальный код:

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

Но я понял, что это не работает на меня. Это будет всегда усекать десятичное число так, чтобы 1.9-> 1, а не ожидаемые 1.9-> 2

Как я фиксирую это использование только, что я "знаю"? (как в, без раунда () или если операторы и такой)

Действительно ли это - проблема соответствия стандартов? В школе я думал, что у меня было что-то подобная работа с Visual C++ 2005 на Windows XP 32 бита, но теперь я при своей домашней попытке сделать то же самое, и это не работает. Мой домашний компилятор является gcc 3.3.5 на OpenBSD 64 бита. Или это могло быть опечаткой в книге?

17
задан Bill the Lizard 19 September 2012 в 01:55
поделиться

2 ответа

static_cast (n + 0,5)

Или static_cast (n> = 0? N + 0,5: n - 0,5) для более правильного поведения при отрицательном n .

31
ответ дан 30 November 2019 в 12:07
поделиться

Просто, чтобы вы знали, это не проблема с вашим компилятором. В Си++, когда вы приводите плавающий диск к интегральному типу, значение всегда усекается.

3
ответ дан 30 November 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: