Arduino GPS Shield by iteadstudio.com

    if(SD_val == 1) SD_lat = sz;
    else if(SD_val == 2) SD_lon = sz;

This bit of code in your printfloat( ) function is dubious.

It only sets a value into the strings SD_lat and SD_long in the case where the data is invalid. which would seem to be the wrong thing to do.

The char array sz is not null-terminated.

You are relying on some kind of unknown assignment from a char array to a string. There may be a suitable default assignment overload, but I would not do it that way.