CODE
/*!*************************************************************************
@brief 16-bit integer convert to ASCII with comma and signum
@param num - число для преобразования
@param str - строка из 8 символов: знак, цифры, точка, конец строки
@param pointpos - позиция точки в строке (1..6, количество мест перед ней)
@param showplus - записывать символ '+'
@note при pointpos = 0, > 6 - точка не ставится
*/
void Half2TextPoint_conv(int16_t num, char *str, uint32_t pointpos, bool showplus)
{
char *strleft = str; // левая граница строки (только для знака)
*(uint32_t *)(str ) = ' ' | ' ' << 8 | ' ' << 16 | ' ' << 24;
*(uint32_t *)(str + 4) = ' ' | ' ' << 8 | ' ' << 16 | '\0'<< 24;
bool fract = true; // дробная часть рассчитана или не нужна
if (pointpos >= 1 && pointpos <= 6) {
*(str + pointpos) = '.';
fract = false; // дробная часть нужна, пока не получена
}
char sign = ' ';
if (showplus)
sign = '+';
if (num < 0) {
sign = '-';
num = -num;
}
str += 6;
do {
if (*str == '.') {
str--;
fract = true;
}
*str = num % 10 + '0';
str--;
} while ((num /= 10) || !fract); // пока нужна дробная часть
if (str < strleft) str++; // проскочили из-за запятой в поз. 1 и числа < 1
*str = sign;
}