[gnoduino] add String.toFloat



commit a566702587c691d86f419a8873185e3cdb7c87ba
Author: Tevin Zhang <mail2tevin gmail com>
Date:   Wed May 29 10:42:07 2013 +0800

    add String.toFloat

 hardware/arduino/cores/arduino/WString.cpp |   45 ++++++++++++++++++++++++++++
 hardware/arduino/cores/arduino/WString.h   |    7 ++++
 2 files changed, 52 insertions(+), 0 deletions(-)
---
diff --git a/hardware/arduino/cores/arduino/WString.cpp b/hardware/arduino/cores/arduino/WString.cpp
index aab2a54..e19f543 100644
--- a/hardware/arduino/cores/arduino/WString.cpp
+++ b/hardware/arduino/cores/arduino/WString.cpp
@@ -100,6 +100,19 @@ String::String(unsigned long value, unsigned char base)
        *this = buf;
 }
 
+String::String(float value, int decimalPlaces)
+{
+       init();
+       char buf[33];
+       *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf);
+}
+
+String::String(double value, int decimalPlaces)
+{
+       init();
+       char buf[33];
+       *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf);
+}
 String::~String()
 {
        free(buffer);
@@ -283,6 +296,20 @@ unsigned char String::concat(unsigned long num)
        return concat(buf, strlen(buf));
 }
 
+unsigned char String::concat(float num)
+{
+       char buf[20];
+       char* string = dtostrf(num, 8, 6, buf);
+       return concat(string, strlen(string));
+}
+
+unsigned char String::concat(double num)
+{
+       char buf[20];
+       char* string = dtostrf(num, 8, 6, buf);
+       return concat(string, strlen(string));
+}
+
 /*********************************************/
 /*  Concatenate                              */
 /*********************************************/
@@ -343,6 +370,19 @@ StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num)
        return a;
 }
 
+StringSumHelper & operator + (const StringSumHelper &lhs, float num)
+{
+       StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
+       if (!a.concat(num)) a.invalidate();
+       return a;
+}
+
+StringSumHelper & operator + (const StringSumHelper &lhs, double num)
+{
+       StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
+       if (!a.concat(num)) a.invalidate();
+       return a;
+}
 /*********************************************/
 /*  Comparison                               */
 /*********************************************/
@@ -659,3 +699,8 @@ long String::toInt(void) const
 }
 
 
+float String::toFloat(void) const
+{
+       if (buffer) return float(atof(buffer));
+       return 0;
+}
diff --git a/hardware/arduino/cores/arduino/WString.h b/hardware/arduino/cores/arduino/WString.h
index b587a3d..2d372c5 100644
--- a/hardware/arduino/cores/arduino/WString.h
+++ b/hardware/arduino/cores/arduino/WString.h
@@ -68,6 +68,8 @@ public:
        explicit String(unsigned int, unsigned char base=10);
        explicit String(long, unsigned char base=10);
        explicit String(unsigned long, unsigned char base=10);
+    explicit String(float, int decimalPlaces=6);
+    explicit String(double, int decimalPlaces=6);
        ~String(void);
 
        // memory management
@@ -100,6 +102,8 @@ public:
        unsigned char concat(unsigned int num);
        unsigned char concat(long num);
        unsigned char concat(unsigned long num);
+       unsigned char concat(float num);
+       unsigned char concat(double num);
        
        // if there's not enough memory for the concatenated value, the string
        // will be left unchanged (but this isn't signalled in any way)
@@ -120,6 +124,8 @@ public:
        friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num);
        friend StringSumHelper & operator + (const StringSumHelper &lhs, long num);
        friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num);
+       friend StringSumHelper & operator + (const StringSumHelper &lhs, float num);
+       friend StringSumHelper & operator + (const StringSumHelper &lhs, double num);
 
        // comparison (only works w/ Strings and "strings")
        operator StringIfHelperType() const { return buffer ? &String::StringIfHelper : 0; }
@@ -172,6 +178,7 @@ public:
 
        // parsing/conversion
        long toInt(void) const;
+       float toFloat(void) const;
 
 protected:
        char *buffer;           // the actual char array


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]