marlin "The LCD can display only around max 320.00 but the users want to see more fine grained steps

It is an 16 bit integer overflow problem. Issue 201: https://github.com/MarlinFirmware/Marlin/issues/201"
Bug fixed by commit 31873ec707d
Type IntegerOverflow
Config "ULTRA_LCD" (1st degree)
Fix-in code
Location lcd/
#include <stdio.h>

#ifdef ULTRA_LCD
//  convert float to string with +1234.5 format
char *ftostr51(float x)
{
  int16_t xx=x*10;
  conv[0]=(xx>=0)?'+':'-';
  xx=abs(xx);
  conv[1]=(xx/10000)%10+'0';
  conv[2]=(xx/1000)%10+'0';
  conv[3]=(xx/100)%10+'0';
  conv[4]=(xx/10)%10+'0';
  conv[5]='.';
  conv[6]=(xx)%10+'0';
  conv[7]=0;
  return conv;
}
#endif
 
int main(int argc, char **argv)
{
  ftostr51(512.5);
  return 0;
}
diff --git a/simple/31873ec.c b/simple/31873ec.c
--- a/simple/31873ec.c
+++ b/simple/31873ec.c
@@ -4,7 +4,7 @@
 //  convert float to string with +1234.5 format
 char *ftostr51(float x)
 {
-  int16_t xx=x*10;
+  long xx=x*10;
   conv[0]=(xx>=0)?'+':'-';
   xx=abs(xx);
   conv[1]=(xx/10000)%10+'0';
#include <stdio.h>

int main(int argc, char **argv)
{
#ifdef ULTRA_LCD
  float x = 512.5f;
  int16_t xx=x*10;
  conv[0]=(xx>=0)?'+':'-';
  xx=abs(xx);
  conv[1]=(xx/10000)%10+'0';
  conv[2]=(xx/1000)%10+'0';
  conv[3]=(xx/100)%10+'0';
  conv[4]=(xx/10)%10+'0';
  conv[5]='.';
  conv[6]=(xx)%10+'0';
  conv[7]=0;
  printf("%l", conv);
#endif
  return 0;
}
. call  ultralcd.pde:2667: char *ftostr51(float &x)
. ERROR ultralcd.pde:2669  int xx=x*10;