Есть хорошая статья о подобной проблеме на 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;
}