|
@@ -5,9 +5,9 @@
|
|
|
|
|
|
|
|
#ifndef ARDUINO
|
|
#ifndef ARDUINO
|
|
|
|
|
|
|
|
-#include "Print.h"
|
|
|
|
|
-#include <cstdio>
|
|
|
|
|
-
|
|
|
|
|
|
|
+#include "Print.h"
|
|
|
|
|
+#include <string> // for sprintf, strchr and strcat
|
|
|
|
|
+
|
|
|
size_t Print::print(const char s[])
|
|
size_t Print::print(const char s[])
|
|
|
{
|
|
{
|
|
|
size_t n = 0;
|
|
size_t n = 0;
|
|
@@ -18,10 +18,26 @@ size_t Print::print(const char s[])
|
|
|
return n;
|
|
return n;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static inline void ensureStringContainsPoint(char* s)
|
|
|
|
|
+{
|
|
|
|
|
+ // Ensures that the decimal point is present.
|
|
|
|
|
+ // For example, we don't want "0" but "0.0".
|
|
|
|
|
+ // Otherwise, the value would be considered as an integer by some parsers
|
|
|
|
|
+ // See issue #22
|
|
|
|
|
+
|
|
|
|
|
+ if (!strchr(s, '.'))
|
|
|
|
|
+ strcat(s, ".0");
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
size_t Print::print(double value, int digits)
|
|
size_t Print::print(double value, int digits)
|
|
|
{
|
|
{
|
|
|
char tmp[32];
|
|
char tmp[32];
|
|
|
|
|
+
|
|
|
sprintf(tmp, "%.*lg", digits+1, value);
|
|
sprintf(tmp, "%.*lg", digits+1, value);
|
|
|
|
|
+
|
|
|
|
|
+ if (digits>0)
|
|
|
|
|
+ ensureStringContainsPoint(tmp);
|
|
|
|
|
+
|
|
|
return print(tmp);
|
|
return print(tmp);
|
|
|
}
|
|
}
|
|
|
|
|
|