Ответ 1
static_cast<int>(n+0.5)
Или static_cast<int>(n >= 0 ? n + 0.5 : n - 0.5)
для более правильного поведения на отрицательном n
.
Я чувствую себя глупо, спрашивая об этом, потому что я знаю, как это сделать, но не так, как это определено в книге. (заметьте, я знаю С++)
До сих пор мы перешли только к основам С++. Таким образом, мы знаем переменные, назначение и базовое литье.
В книге у меня возникают проблемы с этой частью проблемы:
Итак, у меня есть тривиальный код:
double n;
cout<<"Number: ";
cin >> n;
cout <<endl<<static_cast<int>(n)<<endl;
Но я понял, что это не работает для меня. Он всегда будет усекать десятичное число так, что 1.9 → 1, а не ожидаемый 1.9 → 2
Как исправить это, используя только то, что я знаю? (как и в, без round() или если заявления и т.д.)
Является ли это проблемой соблюдения стандартов? В школе я подумал, что у меня что-то подобное работает с Visual С++ 2005 в Windows XP 32 бит, но теперь я в своем доме пытается сделать то же самое, и он не работает. Мой домашний компилятор - gcc 3.3.5 на OpenBSD 64 бит. Или это может быть опечатка в книге?
static_cast<int>(n+0.5)
Или static_cast<int>(n >= 0 ? n + 0.5 : n - 0.5)
для более правильного поведения на отрицательном n
.
Просто, чтобы вы знали, это не проблема с вашим компилятором. В С++, когда вы конвертируете float в интегральный тип, значение всегда усекается.