Skip to content

Commit b8ea343

Browse files
committed
Fix some issues with printing float and double
-fixes some issues with printing float and double -limits the number of decimal places printable to 16
1 parent 9472c9a commit b8ea343

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

cores/arduino/Print.cpp

+17-4
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,23 @@ size_t Print::printLongLong(unsigned long long n, uint8_t base) {
286286
}
287287

288288

289-
size_t Print::printFloat(double number, uint8_t digits)
289+
size_t Print::printFloat(double number, uint16_t decimalPlaces)
290290
{
291-
char str[50];
292-
293-
dtostrf(number, 0, digits, str);
291+
if(decimalPlaces>16)
292+
decimalPlaces = 16;
293+
int digits = 0;
294+
int intValue = (int)number;
295+
while(intValue !=0)
296+
{
297+
intValue /= 10;
298+
digits++;
299+
}
300+
digits += decimalPlaces;
301+
if(number < 0)
302+
digits++;
303+
char str[digits];
304+
305+
306+
dtostrf(number, 0, digits-1, str);
294307
return(print(str));
295308
}

cores/arduino/Print.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Print
3737
int write_error;
3838
size_t printNumber(unsigned long, uint8_t);
3939
size_t printLongLong(unsigned long long, uint8_t);
40-
size_t printFloat(double, uint8_t);
40+
size_t printFloat(double, uint16_t);
4141
protected:
4242
void setWriteError(int err = 1) { write_error = err; }
4343
public:
@@ -67,7 +67,7 @@ class Print
6767
size_t print(long long, int = DEC);
6868
size_t print(unsigned long, int = DEC);
6969
size_t print(unsigned long long, int = DEC);
70-
size_t print(double, int = BIN);
70+
size_t print(double, int = 2);
7171
size_t print(const Printable&);
7272

7373
size_t println(const __FlashStringHelper *);
@@ -81,7 +81,7 @@ class Print
8181
size_t println(long long, int = DEC);
8282
size_t println(unsigned long, int = DEC);
8383
size_t println(unsigned long long, int = DEC);
84-
size_t println(double, int = BIN);
84+
size_t println(double, int = 2);
8585
size_t println(const Printable&);
8686
size_t println(void);
8787
};

0 commit comments

Comments
 (0)