diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp
index 90a37ed5199..1d95961f3b7 100644
--- a/Marlin/src/lcd/menu/menu_advanced.cpp
+++ b/Marlin/src/lcd/menu/menu_advanced.cpp
@@ -371,8 +371,8 @@ void menu_backlash();
 
       #define _MPC_EDIT_ITEMS(N) \
         MPC_t &mpc = thermalManager.temp_hotend[MenuItemBase::itemIndex].mpc; \
-        EDIT_ITEM_FAST_N(float31sign, N, MSG_MPC_POWER_E, &mpc.heater_power, 1, 200); \
-        EDIT_ITEM_FAST_N(float31sign, N, MSG_MPC_BLOCK_HEAT_CAPACITY_E, &mpc.block_heat_capacity, 0, 40); \
+        EDIT_ITEM_FAST_N(float41, N, MSG_MPC_POWER_E, &mpc.heater_power, 1, 200); \
+        EDIT_ITEM_FAST_N(float31, N, MSG_MPC_BLOCK_HEAT_CAPACITY_E, &mpc.block_heat_capacity, 0, 40); \
         EDIT_ITEM_FAST_N(float43, N, MSG_SENSOR_RESPONSIVENESS_E, &mpc.sensor_responsiveness, 0, 1); \
         EDIT_ITEM_FAST_N(float43, N, MSG_MPC_AMBIENT_XFER_COEFF_E, &mpc.ambient_xfer_coeff_fan0, 0, 1)
 
@@ -563,7 +563,7 @@ void menu_backlash();
         editable.decimal = stepper.get_shaping_frequency(X_AXIS);
         if (editable.decimal) {
           ACTION_ITEM_N(X_AXIS, MSG_SHAPING_DISABLE, []{ stepper.set_shaping_frequency(X_AXIS, 0.0f); });
-          EDIT_ITEM_FAST_N(float61, X_AXIS, MSG_SHAPING_FREQ, &editable.decimal, min_frequency, 200.0f, []{ stepper.set_shaping_frequency(X_AXIS, editable.decimal); });
+          EDIT_ITEM_FAST_N(float41, X_AXIS, MSG_SHAPING_FREQ, &editable.decimal, min_frequency, 200.0f, []{ stepper.set_shaping_frequency(X_AXIS, editable.decimal); });
           editable.decimal = stepper.get_shaping_damping_ratio(X_AXIS);
           EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_SHAPING_ZETA, &editable.decimal, 0.0f, 1.0f, []{ stepper.set_shaping_damping_ratio(X_AXIS, editable.decimal); });
         }
@@ -574,7 +574,7 @@ void menu_backlash();
         editable.decimal = stepper.get_shaping_frequency(Y_AXIS);
         if (editable.decimal) {
           ACTION_ITEM_N(Y_AXIS, MSG_SHAPING_DISABLE, []{ stepper.set_shaping_frequency(Y_AXIS, 0.0f); });
-          EDIT_ITEM_FAST_N(float61, Y_AXIS, MSG_SHAPING_FREQ, &editable.decimal, min_frequency, 200.0f, []{ stepper.set_shaping_frequency(Y_AXIS, editable.decimal); });
+          EDIT_ITEM_FAST_N(float41, Y_AXIS, MSG_SHAPING_FREQ, &editable.decimal, min_frequency, 200.0f, []{ stepper.set_shaping_frequency(Y_AXIS, editable.decimal); });
           editable.decimal = stepper.get_shaping_damping_ratio(Y_AXIS);
           EDIT_ITEM_FAST_N(float42_52, Y_AXIS, MSG_SHAPING_ZETA, &editable.decimal, 0.0f, 1.0f, []{ stepper.set_shaping_damping_ratio(Y_AXIS, editable.decimal); });
         }
diff --git a/Marlin/src/lcd/menu/menu_item.h b/Marlin/src/lcd/menu/menu_item.h
index 4d3e33db4c5..11f78d25d5d 100644
--- a/Marlin/src/lcd/menu/menu_item.h
+++ b/Marlin/src/lcd/menu/menu_item.h
@@ -150,10 +150,19 @@ DEFINE_MENU_EDIT_ITEM_TYPE(uint16_5    ,uint16_t ,ui16tostr5rj    ,   0.01f
 DEFINE_MENU_EDIT_ITEM_TYPE(float3      ,float    ,ftostr3rj       ,   1                   ); // 123        right-justified
 DEFINE_MENU_EDIT_ITEM_TYPE(float42_52  ,float    ,ftostr42_52     , 100        , + 0.001f ); // _2.34, 12.34, -2.34 or 123.45, -23.45
 DEFINE_MENU_EDIT_ITEM_TYPE(float43     ,float    ,ftostr43sign    ,1000        , + 0.0001f); // -1.234, _1.234, +1.234
+DEFINE_MENU_EDIT_ITEM_TYPE(float53     ,float    ,ftostr53sign    ,1000        , + 0.0001f); // -12.345, _2.345, +2.345
+DEFINE_MENU_EDIT_ITEM_TYPE(float54     ,float    ,ftostr54sign   ,10000       , + 0.00001f); // -1.2345, _1.2345, +1.2345
 DEFINE_MENU_EDIT_ITEM_TYPE(float4      ,float    ,ftostr4sign     ,   1                   ); // 1234       right-justified
 DEFINE_MENU_EDIT_ITEM_TYPE(float5      ,float    ,ftostr5rj       ,   1                   ); // 12345      right-justified
 DEFINE_MENU_EDIT_ITEM_TYPE(float5_25   ,float    ,ftostr5rj       ,   0.04f               ); // 12345      right-justified (25 increment)
+DEFINE_MENU_EDIT_ITEM_TYPE(float31     ,float    ,ftostr31rj      ,  10        , + 0.01f  ); // 45.6       right-justified
+DEFINE_MENU_EDIT_ITEM_TYPE(float41     ,float    ,ftostr41rj      ,  10        , + 0.01f  ); // 345.6      right-justified
+DEFINE_MENU_EDIT_ITEM_TYPE(float51     ,float    ,ftostr51rj      ,  10        , + 0.01f  ); // 1234.5     right-justified
 DEFINE_MENU_EDIT_ITEM_TYPE(float61     ,float    ,ftostr61rj      ,  10        , + 0.01f  ); // 12345.6    right-justified
+DEFINE_MENU_EDIT_ITEM_TYPE(float32     ,float    ,ftostr32rj      , 100        , + 0.001f ); // 1.23
+DEFINE_MENU_EDIT_ITEM_TYPE(float42     ,float    ,ftostr42rj      , 100        , + 0.001f ); // 12.34      right-justified
+DEFINE_MENU_EDIT_ITEM_TYPE(float52     ,float    ,ftostr52rj      , 100        , + 0.001f ); // 123.45     right-justified
+DEFINE_MENU_EDIT_ITEM_TYPE(float62     ,float    ,ftostr62rj      , 100        , + 0.001f ); // 1234.56    right-justified
 DEFINE_MENU_EDIT_ITEM_TYPE(float72     ,float    ,ftostr72rj      , 100        , + 0.001f ); // 12345.67   right-justified
 DEFINE_MENU_EDIT_ITEM_TYPE(float31sign ,float    ,ftostr31sign    ,  10        , + 0.01f  ); // +12.3
 DEFINE_MENU_EDIT_ITEM_TYPE(float41sign ,float    ,ftostr41sign    ,  10        , + 0.01f  ); // +123.4
diff --git a/Marlin/src/libs/numtostr.cpp b/Marlin/src/libs/numtostr.cpp
index e2737326355..3efbf68217e 100644
--- a/Marlin/src/libs/numtostr.cpp
+++ b/Marlin/src/libs/numtostr.cpp
@@ -45,7 +45,7 @@ constexpr long UINTFLOAT(const float V, const int N) {
 
 char conv[9] = { 0 };
 
-// Format uint8_t (0-100) as rj string with 123% / _12% / __1% format
+// Format uint8_t (0-100) as rj string with __3% / _23% / 123% format
 const char* pcttostrpctrj(const uint8_t i) {
   conv[4] = RJDIGIT(i, 100);
   conv[5] = RJDIGIT(i, 10);
@@ -59,7 +59,7 @@ const char* ui8tostr4pctrj(const uint8_t i) {
   return pcttostrpctrj(ui8_to_percent(i));
 }
 
-// Convert unsigned 8bit int to string 123 format
+// Convert unsigned 8bit int to string with __3 / _23 / 123 format
 const char* ui8tostr3rj(const uint8_t i) {
   conv[5] = RJDIGIT(i, 100);
   conv[6] = RJDIGIT(i, 10);
@@ -74,7 +74,7 @@ const char* ui8tostr2(const uint8_t i) {
   return &conv[6];
 }
 
-// Convert signed 8bit int to rj string with 123 or -12 format
+// Convert signed 8bit int to rj string with __3 / _23 / 123 / -_3 / -23 format
 const char* i8tostr3rj(const int8_t x) {
   int xx = x;
   conv[5] = MINUSOR(xx, RJDIGIT(xx, 100));
@@ -105,32 +105,26 @@ const char* i8tostr3rj(const int8_t x) {
   }
 #endif
 
-// Convert unsigned 16bit int to string 12345 format
-const char* ui16tostr5rj(const uint16_t xx) {
-  conv[3] = RJDIGIT(xx, 10000);
-  conv[4] = RJDIGIT(xx, 1000);
-  conv[5] = RJDIGIT(xx, 100);
-  conv[6] = RJDIGIT(xx, 10);
+// Convert unsigned 16bit int to right-justified string
+inline const char* ui16tostrXrj(const uint16_t xx, const int index) {
+  switch (index) {
+    case 0 ... 3: conv[3] = RJDIGIT(xx, 10000);
+    case 4:       conv[4] = RJDIGIT(xx, 1000);
+    case 5:       conv[5] = RJDIGIT(xx, 100);
+    case 6:       conv[6] = RJDIGIT(xx, 10);
+  }
   conv[7] = DIGIMOD(xx, 1);
-  return &conv[3];
+  return &conv[index];
 }
 
-// Convert unsigned 16bit int to string 1234 format
-const char* ui16tostr4rj(const uint16_t xx) {
-  conv[4] = RJDIGIT(xx, 1000);
-  conv[5] = RJDIGIT(xx, 100);
-  conv[6] = RJDIGIT(xx, 10);
-  conv[7] = DIGIMOD(xx, 1);
-  return &conv[4];
-}
+// Convert unsigned 16bit int to string with 12345 format
+const char* ui16tostr5rj(const uint16_t xx) { return ui16tostrXrj(xx, 8 - 5); }
 
-// Convert unsigned 16bit int to string 123 format
-const char* ui16tostr3rj(const uint16_t xx) {
-  conv[5] = RJDIGIT(xx, 100);
-  conv[6] = RJDIGIT(xx, 10);
-  conv[7] = DIGIMOD(xx, 1);
-  return &conv[5];
-}
+// Convert unsigned 16bit int to string with 1234 format
+const char* ui16tostr4rj(const uint16_t xx) { return ui16tostrXrj(xx, 8 - 4); }
+
+// Convert unsigned 16bit int to string with 123 format
+const char* ui16tostr3rj(const uint16_t xx) { return ui16tostrXrj(xx, 8 - 3); }
 
 // Convert signed 16bit int to rj string with 123 or -12 format
 const char* i16tostr3rj(const int16_t x) {
@@ -222,7 +216,7 @@ const char* ftostr41ns(const_float_t f) {
   return &conv[3];
 }
 
-// Convert signed float to fixed-length string with 12.34 / _2.34 / -2.34 or -23.45 / 123.45 format
+// Convert float to fixed-length string with 12.34 / _2.34 / -2.34 or -23.45 / 123.45 format
 const char* ftostr42_52(const_float_t f) {
   if (f <= -10 || f >= 100) return ftostr52(f); // -23.45 / 123.45
   long i = INTFLOAT(f, 2);
@@ -234,7 +228,7 @@ const char* ftostr42_52(const_float_t f) {
   return &conv[3];
 }
 
-// Convert signed float to fixed-length string with 023.45 / -23.45 format
+// Convert float to fixed-length string with 023.45 / -23.45 format
 const char* ftostr52(const_float_t f) {
   long i = INTFLOAT(f, 2);
   conv[2] = MINUSOR(i, DIGIMOD(i, 10000));
@@ -246,7 +240,7 @@ const char* ftostr52(const_float_t f) {
   return &conv[2];
 }
 
-// Convert signed float to fixed-length string with 12.345 / _2.345 / -2.345 or -23.45 / 123.45 format
+// Convert float to fixed-length string with 12.345 / _2.345 / -2.345 or -23.45 / 123.45 format
 const char* ftostr53_63(const_float_t f) {
   if (f <= -10 || f >= 100) return ftostr63(f); // -23.456 / 123.456
   long i = INTFLOAT(f, 3);
@@ -259,7 +253,7 @@ const char* ftostr53_63(const_float_t f) {
   return &conv[2];
 }
 
-// Convert signed float to fixed-length string with 023.456 / -23.456 format
+// Convert float to fixed-length string with 023.456 / -23.456 format
 const char* ftostr63(const_float_t f) {
   long i = INTFLOAT(f, 3);
   conv[1] = MINUSOR(i, DIGIMOD(i, 100000));
@@ -289,42 +283,58 @@ const char* ftostr63(const_float_t f) {
 
 #endif
 
-// Convert float to fixed-length string with +12.3 / -12.3 format
-const char* ftostr31sign(const_float_t f) {
-  int i = INTFLOAT(f, 1);
-  conv[3] = MINUSOR(i, '+');
-  conv[4] = DIGIMOD(i, 100);
+//
+// Convert float to fixed-length string with +/- and a single decimal place
+//
+inline const char* ftostrX1sign(const_float_t f, const int index) {
+  long i = INTFLOAT(f, 1);
+  conv[index] = MINUSOR(i, '+');
+  switch (index + 1) {
+    case 1: conv[1] = DIGIMOD(i, 100000);
+    case 2: conv[2] = DIGIMOD(i, 10000);
+    case 3: conv[3] = DIGIMOD(i, 1000);
+    case 4: conv[4] = DIGIMOD(i, 100);
+  }
   conv[5] = DIGIMOD(i, 10);
   conv[6] = '.';
   conv[7] = DIGIMOD(i, 1);
-  return &conv[3];
+  return &conv[index];
 }
 
+// Convert float to fixed-length string with +12.3 / -12.3 format
+const char* ftostr31sign(const_float_t f) { return ftostrX1sign(f, 3); }
+
 // Convert float to fixed-length string with +123.4 / -123.4 format
-const char* ftostr41sign(const_float_t f) {
-  int i = INTFLOAT(f, 1);
-  conv[2] = MINUSOR(i, '+');
-  conv[3] = DIGIMOD(i, 1000);
-  conv[4] = DIGIMOD(i, 100);
-  conv[5] = DIGIMOD(i, 10);
-  conv[6] = '.';
-  conv[7] = DIGIMOD(i, 1);
-  return &conv[2];
-}
+const char* ftostr41sign(const_float_t f) { return ftostrX1sign(f, 2); }
 
-// Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
-const char* ftostr43sign(const_float_t f, char plus/*=' '*/) {
-  long i = INTFLOAT(f, 3);
-  conv[2] = i ? MINUSOR(i, plus) : ' ';
+// Convert float to fixed-length string with +1234.5 / +1234.5 format
+const char* ftostr51sign(const_float_t f) { return ftostrX1sign(f, 1); }
+
+//
+// Convert float to string with +/ /- and 3 decimal places
+//
+inline const char* ftostrX3sign(const_float_t f, const int index, char plus/*=' '*/) {
+  long i = INTFLOAT(f, 1);
+  conv[index] = i ? MINUSOR(i, plus) : ' ';
+  switch (index + 1) {
+    case 1: conv[1] = DIGIMOD(i, 100000);
+    case 2: conv[2] = DIGIMOD(i, 10000);
+  }
   conv[3] = DIGIMOD(i, 1000);
   conv[4] = '.';
   conv[5] = DIGIMOD(i, 100);
   conv[6] = DIGIMOD(i, 10);
   conv[7] = DIGIMOD(i, 1);
-  return &conv[2];
+  return &conv[index];
 }
 
-// Convert signed float to string (5 digit) with -1.2345 / _0.0000 / +1.2345 format
+// Convert float to string (6 chars) with -1.234 / _0.000 / +1.234 format
+const char* ftostr43sign(const_float_t f, char plus/*=' '*/) { return ftostrX3sign(f, 2, plus); }
+
+// Convert float to string (7 chars) with -12.345 / _00.000 / +12.345 format
+const char* ftostr53sign(const_float_t f, char plus/*=' '*/) { return ftostrX3sign(f, 1, plus); }
+
+// Convert float to string (7 chars) with -1.2345 / _0.0000 / +1.2345 format
 const char* ftostr54sign(const_float_t f, char plus/*=' '*/) {
   long i = INTFLOAT(f, 4);
   conv[1] = i ? MINUSOR(i, plus) : ' ';
@@ -343,19 +353,6 @@ const char* ftostr5rj(const_float_t f) {
   return ui16tostr5rj(i);
 }
 
-// Convert signed float to string with +1234.5 format
-const char* ftostr51sign(const_float_t f) {
-  long i = INTFLOAT(f, 1);
-  conv[1] = MINUSOR(i, '+');
-  conv[2] = DIGIMOD(i, 10000);
-  conv[3] = DIGIMOD(i, 1000);
-  conv[4] = DIGIMOD(i, 100);
-  conv[5] = DIGIMOD(i, 10);
-  conv[6] = '.';
-  conv[7] = DIGIMOD(i, 1);
-  return &conv[1];
-}
-
 // Convert signed float to string with +123.45 format
 const char* ftostr52sign(const_float_t f) {
   long i = INTFLOAT(f, 2);
@@ -369,47 +366,66 @@ const char* ftostr52sign(const_float_t f) {
   return &conv[1];
 }
 
-// Convert signed float to string with +12.345 format
-const char* ftostr53sign(const_float_t f) {
-  long i = INTFLOAT(f, 3);
-  conv[1] = MINUSOR(i, '+');
-  conv[2] = DIGIMOD(i, 10000);
-  conv[3] = DIGIMOD(i, 1000);
-  conv[4] = '.';
-  conv[5] = DIGIMOD(i, 100);
-  conv[6] = DIGIMOD(i, 10);
-  conv[7] = DIGIMOD(i, 1);
-  return &conv[1];
-}
-
-// Convert unsigned float to string with ____5.6, ___45.6, __345.6, _2345.6, 12345.6 format
-const char* ftostr61rj(const_float_t f) {
+// Convert unsigned float to string with a single digit precision
+inline const char* ftostrX1rj(const_float_t f, const int index=1) {
   const long i = UINTFLOAT(f, 1);
-  conv[1] = RJDIGIT(i, 100000);
-  conv[2] = RJDIGIT(i, 10000);
-  conv[3] = RJDIGIT(i, 1000);
-  conv[4] = RJDIGIT(i, 100);
+  switch (index) {
+    case 0: conv[0] = RJDIGIT(i, 1000000);
+    case 1: conv[1] = RJDIGIT(i, 100000);
+    case 2: conv[2] = RJDIGIT(i, 10000);
+    case 3: conv[3] = RJDIGIT(i, 1000);
+    case 4: conv[4] = RJDIGIT(i, 100);
+  }
   conv[5] = DIGIMOD(i, 10);
   conv[6] = '.';
   conv[7] = DIGIMOD(i, 1);
-  return &conv[1];
+  return &conv[index];
 }
 
-// Convert unsigned float to string with ____5.67, ___45.67, __345.67, _2345.67, 12345.67 format
-const char* ftostr72rj(const_float_t f) {
+// Convert unsigned float to string with _2.3 / 12.3 format
+const char* ftostr31rj(const_float_t f) { return ftostrX1rj(f, 7 - 3); }
+
+// Convert unsigned float to string with __3.4 / _23.4 / 123.4 format
+const char* ftostr41rj(const_float_t f) { return ftostrX1rj(f, 7 - 4); }
+
+// Convert unsigned float to string with ___4.5 / __34.5 / _234.5 / 1234.5 format
+const char* ftostr51rj(const_float_t f) { return ftostrX1rj(f, 7 - 5); }
+
+// Convert unsigned float to string with ____5.6 / ___45.6 / __345.6 / _2345.6 / 12345.6 format
+const char* ftostr61rj(const_float_t f) { return ftostrX1rj(f, 7 - 6); }
+
+// Convert unsigned float to string with two digit precision
+inline const char* ftostrX2rj(const_float_t f, const int index=1) {
   const long i = UINTFLOAT(f, 2);
-  conv[0] = RJDIGIT(i, 1000000);
-  conv[1] = RJDIGIT(i, 100000);
-  conv[2] = RJDIGIT(i, 10000);
-  conv[3] = RJDIGIT(i, 1000);
-  conv[4] = DIGIMOD(i, 100);
+  switch (index) {
+    case 0: conv[0] = RJDIGIT(i, 1000000);
+    case 1: conv[1] = RJDIGIT(i, 100000);
+    case 2: conv[2] = RJDIGIT(i, 10000);
+    case 3: conv[3] = RJDIGIT(i, 1000);
+    case 4: conv[4] = RJDIGIT(i, 100);
+  }
   conv[5] = '.';
   conv[6] = DIGIMOD(i, 10);
   conv[7] = DIGIMOD(i, 1);
-  return conv;
+  return &conv[index];
 }
 
-// Convert signed float to space-padded string with -_23.4_ format
+// Convert unsigned float to string with 1.23 format
+const char* ftostr32rj(const_float_t f) { return ftostrX2rj(f, 4); }
+
+// Convert unsigned float to string with _2.34, 12.34 format
+const char* ftostr42rj(const_float_t f) { return ftostrX2rj(f, 3); }
+
+// Convert unsigned float to string with __3.45, _23.45, 123.45 format
+const char* ftostr52rj(const_float_t f) { return ftostrX2rj(f, 2); }
+
+// Convert unsigned float to string with ___4.56, __34.56, _234.56, 1234.56 format
+const char* ftostr62rj(const_float_t f) { return ftostrX2rj(f, 1); }
+
+// Convert unsigned float to string with ____5.67, ___45.67, __345.67, _2345.67, 12345.67 format
+const char* ftostr72rj(const_float_t f) { return ftostrX2rj(f, 0); }
+
+// Convert float to space-padded string with -_23.4_ format
 const char* ftostr52sp(const_float_t f) {
   long i = INTFLOAT(f, 2);
   uint8_t dig;
@@ -418,17 +434,17 @@ const char* ftostr52sp(const_float_t f) {
   conv[3] = RJDIGIT(i, 1000);
   conv[4] = DIGIMOD(i, 100);
 
-  if ((dig = i % 10)) {          // second digit after decimal point?
+  if ((dig = i % 10)) {           // Second digit after decimal point?
     conv[5] = '.';
     conv[6] = DIGIMOD(i, 10);
     conv[7] = DIGIT(dig);
   }
   else {
-    if ((dig = (i / 10) % 10)) { // first digit after decimal point?
+    if ((dig = (i / 10) % 10)) {  // First digit after decimal point?
       conv[5] = '.';
       conv[6] = DIGIT(dig);
     }
-    else                          // nothing after decimal point
+    else                          // Nothing after decimal point
       conv[5] = conv[6] = ' ';
     conv[7] = ' ';
   }
@@ -440,7 +456,7 @@ const char* utostr3(const uint16_t x) {
   return i16tostr3left(_MIN(x, 999U));
 }
 
-// Convert signed float to space-padded string with 1.23, 12.34, 123.45 format
+// Convert float to space-padded string with 1.23, 12.34, 123.45 format
 const char* ftostr52sprj(const_float_t f) {
   long i = INTFLOAT(f, 2);
   LIMIT(i, -99999, 99999);            // cap to -999.99 - 999.99 range
diff --git a/Marlin/src/libs/numtostr.h b/Marlin/src/libs/numtostr.h
index f8af09ebeec..fde07e83684 100644
--- a/Marlin/src/libs/numtostr.h
+++ b/Marlin/src/libs/numtostr.h
@@ -40,7 +40,7 @@ const char* ui8tostr3rj(const uint8_t i);
 const char* i8tostr3rj(const int8_t x);
 
 #if HAS_PRINT_PROGRESS_PERMYRIAD
-  // Convert 16-bit unsigned permyriad value to percent: 100 / 23 / 23.4 / 3.45
+  // Convert 16-bit unsigned permyriad value to percent: _100 / __23 / 23.4 / 3.45
   const char* permyriadtostr4(const uint16_t xx);
 #endif
 
@@ -86,22 +86,34 @@ const char* ftostr53_63(const_float_t x);
 // Convert signed float to fixed-length string with 023.456 / -23.456 format
 const char* ftostr63(const_float_t x);
 
-// Convert float to fixed-length string with +12.3 / -12.3 format
+// Convert signed float to fixed-length string with +12.3 / -12.3 format
 const char* ftostr31sign(const_float_t x);
 
-// Convert float to fixed-length string with +123.4 / -123.4 format
+// Convert signed float to fixed-length string with +123.4 / -123.4 format
 const char* ftostr41sign(const_float_t x);
 
+// Convert signed float to fixed-length string with +1234.5 / +1234.5 format
+const char* ftostr51sign(const_float_t x);
+
 // Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
 const char* ftostr43sign(const_float_t x, char plus=' ');
 
+// Convert signed float to string (7 chars) with -12.345 / _00.000 / +12.345 format
+const char* ftostr53sign(const_float_t x, char plus=' ');
+
 // Convert signed float to string (5 digit) with -1.2345 / _0.0000 / +1.2345 format
 const char* ftostr54sign(const_float_t x, char plus=' ');
 
 // Convert unsigned float to rj string with 12345 format
 const char* ftostr5rj(const_float_t x);
 
-// Convert signed float to string with +1234.5 format
+// Convert signed float to fixed-length string with +12.3 / -12.3 format
+const char* ftostr31sign(const_float_t x);
+
+// Convert signed float to fixed-length string with +123.4 / -123.4 format
+const char* ftostr41sign(const_float_t x);
+
+// Convert signed float to fixed-length string with +1234.5 format
 const char* ftostr51sign(const_float_t x);
 
 // Convert signed float to space-padded string with -_23.4_ format
@@ -110,23 +122,41 @@ const char* ftostr52sp(const_float_t x);
 // Convert signed float to string with +123.45 format
 const char* ftostr52sign(const_float_t x);
 
-// Convert signed float to string with +12.345 format
-const char* ftostr53sign(const_float_t f);
+// Convert unsigned float to string with _2.3 / 12.3 format
+const char* ftostr31rj(const_float_t x);
 
-// Convert unsigned float to string with 12345.6 format omitting trailing zeros
+// Convert unsigned float to string with __3.4 / _23.4 / 123.4 format
+const char* ftostr41rj(const_float_t x);
+
+// Convert unsigned float to string with ___4.5 / __34.5 / _234.5 / 1234.5 format
+const char* ftostr51rj(const_float_t x);
+
+// Convert unsigned float to string with ____5.6 / ___45.6 / __345.6 / _2345.6 / 12345.6 format
 const char* ftostr61rj(const_float_t x);
 
-// Convert unsigned float to string with 12345.67 format omitting trailing zeros
+// Convert unsigned float to string with 1.23 format
+const char* ftostr32rj(const_float_t f);
+
+// Convert unsigned float to string with _2.34, 12.34 format
+const char* ftostr42rj(const_float_t f);
+
+// Convert unsigned float to string with __3.45, _23.45, 123.45 format
+const char* ftostr52rj(const_float_t f);
+
+// Convert unsigned float to string with ___4.56, __34.56, _234.56, 1234.56 format
+const char* ftostr62rj(const_float_t f);
+
+// Convert unsigned float to string with ____5.67, ___45.67, __345.67, _2345.67, 12345.67 format
 const char* ftostr72rj(const_float_t x);
 
-// Convert float to rj string with 123 or -12 format
+// Convert signed float to rj string with 123 or -12 format
 FORCE_INLINE const char* ftostr3rj(const_float_t x) { return i16tostr3rj(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }
 
 #if ENABLED(LCD_DECIMAL_SMALL_XY)
-  // Convert float to rj string with 1234, _123, 12.3, _1.2, -123, _-12, or -1.2 format
+  // Convert signed float to rj string with 1234, _123, 12.3, _1.2, -123, _-12, or -1.2 format
   const char* ftostr4sign(const_float_t fx);
 #else
-  // Convert float to rj string with 1234, _123, -123, __12, _-12, ___1, or __-1 format
+  // Convert signed float to rj string with 1234, _123, -123, __12, _-12, ___1, or __-1 format
   FORCE_INLINE const char* ftostr4sign(const_float_t x) { return i16tostr4signrj(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }
 #endif