float2str converts floating point numbers to a character array. Its purpose is to have a character representation of floating point numbers when printf floating point support is not enabled by compiler options.
Diff: float2str.h
- Revision:
- 0:d8558b73ffd7
- Child:
- 1:89abb5f1c2fd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/float2str.h Fri Sep 02 15:04:03 2016 +0000 @@ -0,0 +1,149 @@ +/* + Copyright (c) 2016 Jens Strümper + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef MBED_H +#include "mbed.h" +#endif + +#ifndef FLOAT2STR_H +#define FLOAT2STR_H + +namespace js { + +/** float2str converts floating point numbers to a character array. Its purpose is to + * have a character representation of floating point numbers when printf floating point support + * is not enabled by compiler options. + * + * This is done by: . + * <ul> + * <li> Separating the integer from the fract part of the floating point number. </li> + * <li> Casting both parts to integer </li> + * <li> Convert the integers to char arrays </li> + * <li> Add the "." seperator and padding zeros behind the "." </li> + * <li> return the compile charater array </li> + * </ul> + * The toString function takes two arguments: + * <ul> + * <li> Floating point number that shall be converted </li> + * <li> Number of digits after the "." </li> + * </ul> + * + * Only callbacks that have been attached will be called by the library. + * + * Example: + * @code + * #include "mbed.h" + * #include "float2str.h" + * + * float number = 13.467472; + * char *string; + * + * int main(){ + * + * while(1){ + * float number = static_cast <float> (rand()) / (static_cast <float> (100000)); + * charArray = toString (number, 5); + * printf ("Char Array: %s Float: %f \r\n", charArray, number ); + * wait(1); + * } + * @endcode + * + * This example will convert randomly generated floating point numbers to a character array of fixed lenght [10]. + * + */ + + +/* +** reverse string in place +*/ +void reverse(char *s) { +char *j; +int c; + + j = s + strlen(s) - 1; + while(s < j) { + c = *s; + *s++ = *j; + *j-- = c; + } +} +/* +** itoa: convert n to characters in s +*/ +void itoa(int n, char s[]) +{ + int i, sign; + + if ((sign = n) < 0) /* record sign */ + n = -n; /* make n positive */ + i = 0; + do { /* generate digits in reverse order */ + s[i++] = n % 10 + '0'; /* get next digit */ + } while ((n /= 10) > 0); /* delete it */ + if (sign < 0) + s[i++] = '-'; + s[i] = '\0'; + reverse(s); +} + +/* +** toString: convert floating point number to +*/ + +char *toString(float number, int digits) +{ + int d1; + int d2; + char buf_d1[10]; + char buf_d2[10]; + static char buf_out[10]; +// char padzero[10]; + double fractpart, intpart; + int multiplier=1; + + for (int j=0; j < digits; j++){ + multiplier = multiplier * 10; + } + fractpart = modf (number , &intpart); + d2 = int(fractpart*multiplier); + d1 = int(intpart); + itoa(d1, buf_d1); + itoa(d2, buf_d2); + + strcpy(buf_out, buf_d1); + strcat(buf_out, "."); + + if (strlen(buf_d2) < digits) { /* adding n padding zero's if nessesary */ + for (int k=0; k < (digits - strlen(buf_d2)); k++){ + strcat(buf_out, "0"); + } + } + strcat(buf_out, buf_d2); + + return buf_out; +} + +}; + +using namespace js; + +#endif \ No newline at end of file