Skip to content

Add print(float) to save space (VS double). #2036

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions cores/arduino/Print.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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 <class T>
size_t Print::printFloat(T number, uint8_t digits)
{
size_t n = 0;

Expand All @@ -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;
}
Expand All @@ -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
Expand Down
5 changes: 4 additions & 1 deletion cores/arduino/Print.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <class T>
size_t printFloat(T, uint8_t);
protected:
void setWriteError(int err = 1)
{
Expand Down Expand Up @@ -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 &);

Expand All @@ -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);
Expand Down