Skip to content

Commit 840725a

Browse files
honnetfpistm
andcommitted
feat: add print(float) to save space (vs double)
Signed-off-by: Cedric Honnet <[email protected]> Co-Authored-By: Frederic Pillon <[email protected]>
1 parent 9fb5081 commit 840725a

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

Diff for: cores/arduino/Print.cpp

+16-3
Original file line numberDiff line numberDiff line change
@@ -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+
132137
size_t Print::print(double n, int digits)
133138
{
134139
return printFloat(n, digits);
@@ -221,6 +226,13 @@ size_t Print::println(unsigned long long num, int base)
221226
return 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+
224236
size_t Print::println(double num, int digits)
225237
{
226238
size_t n = print(num, digits);
@@ -406,7 +418,8 @@ size_t Print::printULLNumber(unsigned long long n64, uint8_t base)
406418
return bytes;
407419
}
408420

409-
size_t Print::printFloat(double number, uint8_t digits)
421+
template <class T>
422+
size_t Print::printFloat(T number, uint8_t digits)
410423
{
411424
size_t n = 0;
412425

@@ -430,7 +443,7 @@ size_t Print::printFloat(double number, uint8_t digits)
430443
}
431444

432445
// Round correctly so that print(1.999, 2) prints as "2.00"
433-
double rounding = 0.5;
446+
T rounding = 0.5;
434447
for (uint8_t i = 0; i < digits; ++i) {
435448
rounding /= 10.0;
436449
}
@@ -439,7 +452,7 @@ size_t Print::printFloat(double number, uint8_t digits)
439452

440453
// Extract the integer part of the number and print it
441454
unsigned long int_part = (unsigned long)number;
442-
double remainder = number - (double)int_part;
455+
T remainder = number - (T)int_part;
443456
n += print(int_part);
444457

445458
// Print the decimal point, but only if there are digits beyond

Diff for: cores/arduino/Print.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ class Print {
3636
int write_error;
3737
size_t printNumber(unsigned long, uint8_t);
3838
size_t printULLNumber(unsigned long long, uint8_t);
39-
size_t printFloat(double, uint8_t);
39+
template <class T>
40+
size_t printFloat(T, uint8_t);
4041
protected:
4142
void setWriteError(int err = 1)
4243
{
@@ -86,6 +87,7 @@ class Print {
8687
size_t print(unsigned long, int = DEC);
8788
size_t print(long long, int = DEC);
8889
size_t print(unsigned long long, int = DEC);
90+
size_t print(float, int = 2);
8991
size_t print(double, int = 2);
9092
size_t print(const Printable &);
9193

@@ -100,6 +102,7 @@ class Print {
100102
size_t println(unsigned long, int = DEC);
101103
size_t println(long long, int = DEC);
102104
size_t println(unsigned long long, int = DEC);
105+
size_t println(float, int = 2);
103106
size_t println(double, int = 2);
104107
size_t println(const Printable &);
105108
size_t println(void);

0 commit comments

Comments
 (0)