C++: как округлить double до int? [дубликат]
Возможные Дубликаты:
round () для float в C++
у меня есть двойной (назовите его x), предназначенный для 55, но на самом деле хранится как 54.999999999999943157, который я только что понял.
поэтому, когда я делаю
double x = 54.999999999999943157;
int y = (int) x;
y = 54 вместо 55!
это озадачило меня надолго. Как мне получить его правильно круглый?
5 ответов:
добавить 0.5 перед заливкой (если x > 0) или вычесть 0.5 (если x
float x = 55; // stored as 54.999999... x = x + 0.5; // x is now 55.499999... int y = (int)x; // truncated to 55
в C++11 вводит std:: round, который, вероятно, использует аналогичную логику добавления 0.5 к| x / под капотом (см. ссылку, если интересно), но, очевидно, более надежен.
следующий вопрос может быть почему поплавок не хранится как точно 55. Для объяснения см. этой stackoverflow ответ.
литье не является математической операцией и не ведет себя как таковая. Попробуй
int y = (int)round(x);
приведение к
int
усекает значение. Добавление0.5
заставляет его делать правильное округление.int y = (int)(x + 0.5);