Merely expanding on what ConnorWolf has said (which I saw yesterday), look at the link he gave you, it gives you a run down on the command you're after.
The dtostrf() function returns the pointer to the converted string s.
char* dtostrf ( double __val,
signed char __width,
unsigned char __prec,
char * __s
The dtostrf() function converts the double value passed in val into an ASCII representationthat will be stored under s. The caller is responsible for providing sufficient storage in s.
Conversion is done in the format "[-]d.ddd". The minimum field width of the output string (including the '.' and the possible sign for negative values) is given in width, and prec determines the number of digits after the decimal sign. width is signed value, negative for left adjustment.
From that, I wrote a short sketch that divides
millis() by 1000 and saves this in a float, we then use this float as a source for
dtostrf() to do it's work and store the result in a char array.
float f = millis()/1000.0;
I have picked arbitrary values, you're going to have to do the calculations on the size of the array to create (don't forget the leading negative sign, the digits before the decimal, the decimal and your precision digits as well as the null terminator!