diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp index 8b41f7c1ba..e9267405a5 100644 --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -129,6 +129,11 @@ size_t Print::print(unsigned long long n, int base) } } +size_t Print::print(float n, int digits) +{ + return printFloat(n, digits); +} + size_t Print::print(double n, int digits) { return printFloat(n, digits); @@ -221,6 +226,13 @@ size_t Print::println(unsigned long long num, int base) return n; } +size_t Print::println(float num, int digits) +{ + size_t n = print(num, digits); + n += println(); + return n; +} + size_t Print::println(double num, int digits) { size_t n = print(num, digits); @@ -406,7 +418,8 @@ size_t Print::printULLNumber(unsigned long long n64, uint8_t base) return bytes; } -size_t Print::printFloat(double number, uint8_t digits) +template +size_t Print::printFloat(T number, uint8_t digits) { size_t n = 0; @@ -430,7 +443,7 @@ size_t Print::printFloat(double number, uint8_t digits) } // Round correctly so that print(1.999, 2) prints as "2.00" - double rounding = 0.5; + T rounding = 0.5; for (uint8_t i = 0; i < digits; ++i) { rounding /= 10.0; } @@ -439,7 +452,7 @@ size_t Print::printFloat(double number, uint8_t digits) // Extract the integer part of the number and print it unsigned long int_part = (unsigned long)number; - double remainder = number - (double)int_part; + T remainder = number - (T)int_part; n += print(int_part); // Print the decimal point, but only if there are digits beyond diff --git a/cores/arduino/Print.h b/cores/arduino/Print.h index 036fd5347b..dc39d634c5 100644 --- a/cores/arduino/Print.h +++ b/cores/arduino/Print.h @@ -36,7 +36,8 @@ class Print { int write_error; size_t printNumber(unsigned long, uint8_t); size_t printULLNumber(unsigned long long, uint8_t); - size_t printFloat(double, uint8_t); + template + size_t printFloat(T, uint8_t); protected: void setWriteError(int err = 1) { @@ -86,6 +87,7 @@ class Print { size_t print(unsigned long, int = DEC); size_t print(long long, int = DEC); size_t print(unsigned long long, int = DEC); + size_t print(float, int = 2); size_t print(double, int = 2); size_t print(const Printable &); @@ -100,6 +102,7 @@ class Print { size_t println(unsigned long, int = DEC); size_t println(long long, int = DEC); size_t println(unsigned long long, int = DEC); + size_t println(float, int = 2); size_t println(double, int = 2); size_t println(const Printable &); size_t println(void);