Arduino Mega and sending data via serial3.print()
The comment by bjthom seems very straightforward, but if that is not an option for you, how about sprintf?

float const val = 22.45;
char buf[64];
sprintf(buf, "%f\r", val);
Serial3.print(buf);


Update

You are right, sprintf is a potential bottleneck. Here is a far more efficient function that gets you around the usage of the String class:

char * ftoa_wr(float f, char * a, int precision=2)
{
  char * const ret = a;
  long const bp = (long)f;
  itoa(bp, a, 10);
  while(*a != '\0') a++;
  *a++ = '.';
  long const ap = abs(
    (long)(
      (f - bp) * pow(10, precision)
    )
  );
  itoa(ap, a, 10);
  while(*a != '\0') a++;
  *a++ = '\r';
  return ret;
}


With it you could do

char buf[10];
Serial3.print(ftoa_wr(22.45, buf));