@@ -129,6 +129,11 @@ size_t Print::print(unsigned long long n, int base)
129
129
}
130
130
}
131
131
132
+ size_t Print::print (float n, int digits)
133
+ {
134
+ return printFloat (n, digits);
135
+ }
136
+
132
137
size_t Print::print (double n, int digits)
133
138
{
134
139
return printFloat (n, digits);
@@ -221,6 +226,13 @@ size_t Print::println(unsigned long long num, int base)
221
226
return n;
222
227
}
223
228
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
+
224
236
size_t Print::println (double num, int digits)
225
237
{
226
238
size_t n = print (num, digits);
@@ -406,6 +418,58 @@ size_t Print::printULLNumber(unsigned long long n64, uint8_t base)
406
418
return bytes;
407
419
}
408
420
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
+
409
473
size_t Print::printFloat (double number, uint8_t digits)
410
474
{
411
475
size_t n = 0 ;
0 commit comments