I'm answering the question in the LAST sentence of the original post - not the heading. But this is the right answer for your project.
You say "I only need 2 decimal places" - so this should tell you that there's no need for floating point maths. Physicists and engineers need floats to represent very, very small or very, very large quantities, but you need "fixed point" - which means doing integer maths and choosing your units correctly. Fixed point is quicker, more accurate and reduces the size of your compiled binary, as there's no need for the floating point code.
The simplest solution is to use integers and display millivolts, in the same way that the delay() function you've just used takes an argument of an integer number of milliseconds, not a fractional number of seconds.
#define VREF 5000
uint32_t mvolts;
.
.
mvolts=(value*VREF)>>10; // No floats here...
lcd_printf("milliVolts: %d",mvolts); // ...and no casts
If you must display volts, then this does the trick:
lcd_printf("Volts: %d.%02d ",mvolts/1000, (mvolts%1000)/10);
Notice, by the way, that mvolts is a 32 bit integer, because you're now multiplying a 10 bit number by 5000 and that won't fit into 16 bits. This is needed because you need to preserve the accuracy of the value while doing the scaling. I don't think this is heading off-topic, as I take it that you do want to display the correct value or there's no point in displaying those two decimal places.
Unless you're careful, the compiler will work out the value of 5000/1024 - 4.8828125 - and then do integer arithmetic, which cuts off the fractional part and ends up multipliying your ADC result by 4. To guarantee the correct behaviour, multiply by 5000 then divide - 2 separate operations. As 1024 is 2**10, shifting right by ten bits is identical to dividing by 1024.
Finally - don't assume that reading 1023 from the ADC actually means 5.000 volts to 4 significant figures; calibrate against a tested voltmeter by tweaking #define VREF
to get the right result.