@@ -129,6 +129,11 @@ size_t Print::print(unsigned long long n, int base)
129129 }
130130}
131131
132+ size_t Print::print (float n,int digits)
133+ {
134+ return printFloat (n, digits);
135+ }
136+
132137size_t Print::print (double n,int digits)
133138{
134139return printFloat (n, digits);
@@ -221,6 +226,13 @@ size_t Print::println(unsigned long long num, int base)
221226return n;
222227}
223228
229+ size_t Print::println (float num,int digits)
230+ {
231+ size_t n =print (num, digits);
232+ n +=println ();
233+ return n;
234+ }
235+
224236size_t Print::println (double num,int digits)
225237{
226238size_t n =print (num, digits);
@@ -406,6 +418,58 @@ size_t Print::printULLNumber(unsigned long long n64, uint8_t base)
406418return bytes;
407419}
408420
421+ size_t Print::printFloat (float number,uint8_t digits)
422+ {
423+ size_t n =0 ;
424+
425+ if (isnan (number)) {
426+ return print (" nan" );
427+ }
428+ if (isinf (number)) {
429+ return print (" inf" );
430+ }
431+ if (number >4294967040.0 ) {
432+ return print (" ovf" );// constant determined empirically
433+ }
434+ if (number < -4294967040.0 ) {
435+ return print (" ovf" );// constant determined empirically
436+ }
437+
438+ // Handle negative numbers
439+ if (number <0.0 ) {
440+ n +=print (' -' );
441+ number = -number;
442+ }
443+
444+ // Round correctly so that print(1.999, 2) prints as "2.00"
445+ float rounding =0.5 ;
446+ for (uint8_t i =0 ; i < digits; ++i) {
447+ rounding /=10.0 ;
448+ }
449+
450+ number += rounding;
451+
452+ // Extract the integer part of the number and print it
453+ unsigned long int_part = (unsigned long )number;
454+ float remainder = number - (float )int_part;
455+ n +=print (int_part);
456+
457+ // Print the decimal point, but only if there are digits beyond
458+ if (digits >0 ) {
459+ n +=print (' .' );
460+ }
461+
462+ // Extract digits from the remainder one at a time
463+ while (digits-- >0 ) {
464+ remainder *=10.0 ;
465+ unsigned int toPrint = (unsigned int )remainder;
466+ n +=print (toPrint);
467+ remainder -= toPrint;
468+ }
469+
470+ return n;
471+ }
472+
409473size_t Print::printFloat (double number,uint8_t digits)
410474{
411475size_t n =0 ;