Skip to content

Commit b626ed2

Browse files
committed
dtostrf should not print fractional part if prec is 0
Signed-off-by: Frederic Pillon <[email protected]>
1 parent aa563b0 commit b626ed2

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

Diff for: cores/arduino/avr/dtostrf.c

+19-11
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,27 @@ char *dtostrf(double val, signed char width, unsigned char prec, char *sout)
4949
unsigned long int_part = (unsigned long)val;
5050
double remainder = val - (double)int_part;
5151

52-
// Extract digits from the remainder
53-
unsigned long dec_part = 0;
54-
double decade = 1.0;
55-
for (int i = 0; i < prec; i++) {
56-
decade *= 10.0;
57-
}
58-
remainder *= decade;
59-
dec_part = (int)remainder;
52+
if (prec > 0) {
53+
// Extract digits from the remainder
54+
unsigned long dec_part = 0;
55+
double decade = 1.0;
56+
for (int i = 0; i < prec; i++) {
57+
decade *= 10.0;
58+
}
59+
remainder *= decade;
60+
dec_part = (int)remainder;
6061

61-
if (negative) {
62-
sprintf(sout, "-%ld.%0*ld", int_part, prec, dec_part);
62+
if (negative) {
63+
sprintf(sout, "-%ld.%0*ld", int_part, prec, dec_part);
64+
} else {
65+
sprintf(sout, "%ld.%0*ld", int_part, prec, dec_part);
66+
}
6367
} else {
64-
sprintf(sout, "%ld.%0*ld", int_part, prec, dec_part);
68+
if (negative) {
69+
sprintf(sout, "-%ld", int_part);
70+
} else {
71+
sprintf(sout, "%ld", int_part);
72+
}
6573
}
6674
// Handle minimum field width of the output string
6775
// width is signed value, negative for left adjustment.

0 commit comments

Comments
 (0)