Closed GoogleCodeExporter closed 9 years ago
Here's a quickie function for it based on printFloat():
String floatToString(double number, uint8_t digits)
{
String resultString = "";
// Handle negative numbers
if (number < 0.0)
{
resultString += "-";
number = -number;
}
// Round correctly so that print(1.999, 2) prints as "2.00"
double rounding = 0.5;
for (uint8_t i=0; i<digits; ++i)
rounding /= 10.0;
number += rounding;
// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
resultString += int_part;
// Print the decimal point, but only if there are digits beyond
if (digits > 0)
resultString += ".";
// Extract digits from the remainder one at a time
while (digits-- > 0)
{
remainder *= 10.0;
int toPrint = int(remainder);
resultString += toPrint;
remainder -= toPrint;
}
return resultString;
}
Original comment by tom.i...@gmail.com
on 8 Oct 2010 at 2:16
Would appreciate int and long int (time_t) to String as well, since Float's
been Accepted.
Right now I'm stuck like this:
sprintf(stringbuf,"unixtime: %lu", now());
uoled.DrawText(0, 1, 0, stringbuf, color);
Tracking down and reading sprintf's call parameter documentation is quite...
um. Wall-of-text feeling to newbies. @_@
Original comment by Kamil...@gmail.com
on 1 Jan 2011 at 7:33
I believe the best implementation for this would be to just add an option to
add these linker arguments: -Wl,-u,vfscanf -lscanf_flt -Wl,-u,vfprintf
-lprintf_flt
This could be archived by adding an option for custom linker arguments (as
described in http://code.google.com/p/arduino/issues/detail?id=421) but I think
it would be better to have the option to enable/disable this for each sketch
independently (that would mean having something like a sketch preferences menu).
Original comment by Gregor.G...@gmail.com
on 8 May 2012 at 10:38
Awesome, thanks for that code. Worked a treat!
Original comment by edwardta...@gmail.com
on 3 Jun 2012 at 6:28
That was fixed upstream.
Original comment by c.mag...@arduino.cc
on 16 Mar 2014 at 1:50
works perfect.
Thanks!!
Original comment by vmibo...@gmail.com
on 28 Aug 2014 at 6:44
It's not that simple; although I am a newbie, I adventure to give my thinking:
A programming language must be congruent, String must work with floats just
like print and println does.
I just encounter this issue trying to log to a SD a string with comma separated
fields: a char tag, a int, and a float. I expected that by += them one by one
to work, just like the println I would use to send it to the SD, but alas!,
compiler error!.
I Know that I can get around that with tricks like the one proposed here, but
it is what we call here a "chapuza". I will get along with my chapuza; broke
the function to save to SD in parts and sending each field alone.
Original comment by jaimejdi...@gmail.com
on 8 Oct 2014 at 12:58
Original issue reported on code.google.com by
tom.i...@gmail.com
on 8 Oct 2010 at 2:01