This should do what you want. It's much easier to just use the system libraries to do this, though.
#include <iostream>
#include <string>
void increment( std::string& num )
{
    for ( auto ch = num.rbegin(); ch != num.rend(); ch++ )
    {
        switch ( *ch )
        {
        case '9':
                *ch = '0';
        case '.':
                continue;
        case '-':
                num.insert( 1, 1, '1' );
                return;
        default:
            (*ch)++;
            return;
        }
    }
    num.insert( 0, 1, '1' );
}
std::string round( const std::string& num, size_t precision )
{
    size_t dot = num.find( '.' );
    if ( dot == std::string::npos || dot + precision >= num.size() )
    {
        return num;
    }
    size_t length = std::min( dot + precision + 1, num.size() );
    char lastCh = num[ length ];
    std::string result = num.substr( 0, length );
    if ( lastCh >= '5' && lastCh <= '9' )
    {
        increment( result );
    }
    return result;
}
int main()
{
    std::cout << round( "123.45", 4 ) << "\n";
    std::cout << round( "123.456", 4 ) << "\n";
    std::cout << round( "123.4567", 4 ) << "\n";
    std::cout << round( "123.45678", 4 ) << "\n";
    std::cout << round( "123.456789", 4 ) << "\n";
    std::cout << round( "123.456723", 4 ) << "\n";
    std::cout << round( "999.9999995", 4 ) << "\n";
    std::cout << round( "-123.456723", 4 ) << "\n";
    std::cout << round( "-999.9999995", 4 ) << "\n";
}