Ахтунг! Язык демонофф! Многа букаFFh!
Возможны крах системы, потеря данных и красные глаза... В общем, я предупредил!
Поехали!Дано число с плавающей точкой(от 0 до 999.9999):
float f = 23.0204; //choosen by fair dice roll
Надо разделить целую и дробную часть (в виде количества десятитысячных) и записать их в целочисленные переменные.
Быдлокодим:
uint32_t integer, fractional;
integer = f;
fractional = (f - integer) * 10000;
Получаем в результате:
integer == 23
fractional == 203
Что-то пошло не так...
Нужен результат:
integer == 23
fractional == 204
Пока выкрутился так:
uint32_t fract_int_text(float f, uint32_t *integer)
{
char str[sizeof("999.9999")];
uint32_t fractional;
sprintf(str, "%3.4f",f);
sscanf(str, "%u.%4u", integer, &fractional);
return fractional;
}
Это, конечно, работает. Но еще танцует и поет (см.
https://lurkmore.to/Индусский_код).
Да и гонять эти спринтфы ссканфы на микроконтроллере накладно...
Существует ли более удачное решение для подобной задачи?
Пишем на Сях(с плюсами и без).