Привет я хочу, чтобы закруглить двойные номера, как это (от нуля) в C++:C++ округления чисел от нуля
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
Что такое эффективный способ сделать это?
Привет я хочу, чтобы закруглить двойные номера, как это (от нуля) в C++:C++ округления чисел от нуля
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
Что такое эффективный способ сделать это?
inline double myround(double x)
{
return x < 0 ? floor(x) : ceil(x);
}
Как уже упоминалось в the article Huppie cites, это лучше всего выражается в виде шаблона, который работает во всех типах флоат
См http://en.cppreference.com/w/cpp/numeric/math/floor и http://en.cppreference.com/w/cpp/numeric/math/floor
или, благодаря Pax , нефункциональная версия:
x = (x < 0) ? floor(x) : ceil(x);
спасибо, что это работает – Emre
Хороший звонок, @Ruben, добавил не функциональный вариант и дал вам право голоса. Надеюсь, вы не против (редактирование, то есть, очевидно, вы не против голосования). – paxdiablo
Ожидание 3k себя - добавлено в встроенный спецификатор - я бы попытался найти хорошее имя и вставить его в lib, вероятно, в качестве шаблона для всех поплавков - он не стоил бы никакой эффективности и позволял вам быстро изолировать или изменить все его применения –
попробовать
double rounded = _copysign(ceil(abs(x)), x);
Существует хорошая статья о аналогичной проблеме на CPlusPlus.com. Простое решение вашей проблемы должно быть что-то вроде этого:
double customRound(double value) const {
return value < 0 ? floor(value) : ceil(value);
}
Лучшим решением является один упомянутый в статье, которая использует шаблон:
//--------------------------------------------------------------------------
// symmetric round up
// Bias: away from zero
template <typename FloatType>
FloatType ceil0(const FloatType& value)
{
FloatType result = std::ceil(std::fabs(value));
return (value < 0.0) ? -result : result;
}
Почему разве это называется customFloor - это ни: P –
Я вижу в цитируемой статье его impl'd, как template
Интересная статья, +1 –
@Ruben Bartelink: «Круглый» должен быть лучше:) ... кстати .. у вас есть некоторые навыки ввода ниндзя ;-) – Huppie
Из (оригинал) названием «C++ Double округление ", я думал, что вы хотели округлить номер дважды, просто чтобы быть уверенным :-) – paxdiablo
Вы правы: D thx для его редактирования – Emre