neptunium-firmware/Core/Src/utils.c

33 lines
1.0 KiB
C
Raw Normal View History

#include "utils.h"
// https://stackoverflow.com/questions/23191203/convert-float-to-string-without-sprintf
char *float_to_char(float x, char *p)
{
char *s = p + FLOAT_CHAR_BUFF_SIZE; // go to end of buffer
uint16_t decimals; // variable to store the decimals
int units; // variable to store the units (part to left of decimal place)
if (x < 0)
{ // take care of negative numbers
decimals = (int)(x * -100) % 100; // make 1000 for 3 decimals etc.
units = (int)(-1 * x);
}
else
{ // positive numbers
decimals = (int)(x * 100) % 100;
units = (int)x;
}
*--s = (decimals % 10) + '0';
decimals /= 10; // repeat for as many decimal places as you need
*--s = (decimals % 10) + '0';
*--s = '.';
while (units > 0)
{
*--s = (units % 10) + '0';
units /= 10;
}
if (x < 0)
*--s = '-'; // unary minus sign for negative numbers
return s;
}