C++, округляющийся чисел далеко от нуля

Это отмечает строку как дословный строковый литерал - что-либо в строке, которая обычно интерпретировалась бы как , escape-последовательность проигнорирована.

Так "C:\\Users\\Rich" совпадает с @"C:\Users\Rich"

существует одно исключение: escape-последовательность необходима для двойной кавычки. Для выхода из двойной кавычки необходимо поместить две двойных кавычки подряд. Например, @"""" оценивает к ".

7
задан paxdiablo 25 August 2009 в 07:27
поделиться

3 ответа

inline double myround(double x)
{
  return x < 0 ? floor(x) : ceil(x);
}

Как упоминалось в статье, цитируемой Хуппи , это лучше всего выразить как шаблон, который работает для всех типов с плавающей запятой

См. 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);
25
ответ дан 6 December 2019 в 06:37
поделиться

На 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;
}
3
ответ дан 6 December 2019 в 06:37
поделиться

try

 double rounded = _copysign(ceil(abs(x)), x);
-1
ответ дан 6 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

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