@@ -100,6 +100,19 @@ String::String(unsigned long value, unsigned char base)
100100 *this = buf;
101101}
102102
103+ String::String (float value, int decimalPlaces)
104+ {
105+ init ();
106+ char buf[33 ];
107+ *this = dtostrf (value, (decimalPlaces + 2 ), decimalPlaces, buf);
108+ }
109+
110+ String::String (double value, int decimalPlaces)
111+ {
112+ init ();
113+ char buf[33 ];
114+ *this = dtostrf (value, (decimalPlaces + 2 ), decimalPlaces, buf);
115+ }
103116String::~String ()
104117{
105118 free (buffer);
@@ -283,6 +296,20 @@ unsigned char String::concat(unsigned long num)
283296 return concat (buf, strlen (buf));
284297}
285298
299+ unsigned char String::concat (float num)
300+ {
301+ char buf[20 ];
302+ char * string = dtostrf (num, 8 , 6 , buf);
303+ return concat (string, strlen (string));
304+ }
305+
306+ unsigned char String::concat (double num)
307+ {
308+ char buf[20 ];
309+ char * string = dtostrf (num, 8 , 6 , buf);
310+ return concat (string, strlen (string));
311+ }
312+
286313/* ********************************************/
287314/* Concatenate */
288315/* ********************************************/
@@ -343,6 +370,19 @@ StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num)
343370 return a;
344371}
345372
373+ StringSumHelper & operator + (const StringSumHelper &lhs, float num)
374+ {
375+ StringSumHelper &a = const_cast <StringSumHelper&>(lhs);
376+ if (!a.concat (num)) a.invalidate ();
377+ return a;
378+ }
379+
380+ StringSumHelper & operator + (const StringSumHelper &lhs, double num)
381+ {
382+ StringSumHelper &a = const_cast <StringSumHelper&>(lhs);
383+ if (!a.concat (num)) a.invalidate ();
384+ return a;
385+ }
346386/* ********************************************/
347387/* Comparison */
348388/* ********************************************/
@@ -659,3 +699,8 @@ long String::toInt(void) const
659699}
660700
661701
702+ float String::toFloat (void ) const
703+ {
704+ if (buffer) return float (atof (buffer));
705+ return 0 ;
706+ }
0 commit comments