From 1d861783877eda29996a08184e62a181f96d6f75 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Wed, 26 Nov 2008 14:15:24 +0000 Subject: Adding support for printing floats and doubles (defaulting to 2 decimal places) --- cores/arduino/Print.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'cores/arduino/Print.cpp') diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp index feff940..143f15d 100755 --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "wiring.h" #include "Print.h" @@ -78,6 +79,11 @@ void Print::print(long n, int base) printNumber(n, base); } +void Print::print(double n) +{ + printFloat(n*100, 2); +} + void Print::println(void) { print('\r'); @@ -132,6 +138,12 @@ void Print::println(long n, int base) println(); } +void Print::println(double n) +{ + print(n); + println(); +} + // Private Methods ///////////////////////////////////////////////////////////// void Print::printNumber(unsigned long n, uint8_t base) @@ -154,3 +166,21 @@ void Print::printNumber(unsigned long n, uint8_t base) '0' + buf[i - 1] : 'A' + buf[i - 1] - 10)); } + +void Print::printFloat(double number, uint8_t scale) +{ + double mult = pow(10,scale); + double rounded = floor(number /mult); + double biground = rounded * mult; + double remainder = (number - biground); + remainder = remainder / mult; + print(long(rounded)); + print("."); + + while (scale--) { + double toPrint = floor(remainder * 10); + print(int(toPrint)); + remainder -= (toPrint/10); + remainder *= 10; + } +} \ No newline at end of file -- cgit v1.2.3-18-g5258