Страница 1 из 1
СИ и double
Добавлено: Чт авг 29, 2013 10:36:20
СергейКир
Здравствуйте.
Язык СИ. МК-Mega8. Среда - AVRStudio6
Вывожу символы на LCD.
Пытаюсь сделать следующее:
Код: Выделить всё
double u=105.6;
char ADC_[10];
//..............
sprintf(ADC_,"%d.%d",u/100,u%100);
Получается 105.6/100=1
105.6%100=56
Выводит в итоге 1.56, а мне надо 1.056
Прошу помощи, как реализовать правильный алгоритм.
Спасибо заранее.
Re: СИ и double
Добавлено: Чт авг 29, 2013 11:01:32
a_skr
105.6%100=56 - это как получилось?
% - остаток от деления
целых. должно было получиться 105%100=5
если уж каким-то способом удалось получить 56, то вывести число с незначащими нулями можно так:
printf("%03d",56);
Re: СИ и double
Добавлено: Чт авг 29, 2013 11:33:06
СергейКир
можно так:
printf("%03d",56)
Спасибо.
С Вашей помощью получилось вывести 1.05
105.6%100=56 - это как получилось?
56 получалось, я просто не весь код привёл.
Спасибо ещё раз.
Re: СИ и double
Добавлено: Пт авг 30, 2013 12:30:52
YS
Начнем с того, что использовать вещественный тип в контроллере, в котором нет FPU, - чрезвычайно плохая идея сама по себе. Используйте арифметику с фиксированной точкой.
sprintf тоже не уменьшит размер и не увеличит скорость кода.
А вообще для описанной задачи существует функция
modf.
Re: СИ и double
Добавлено: Пт сен 06, 2013 15:13:53
Antifritz
А еще, в AtmelStudio, double и float - одно и тоже - 4 байта (стандартный float), так что тип double лучше вообще не использовать.
Re: СИ и double
Добавлено: Пт сен 06, 2013 16:17:00
mehanik_all
Попробуй так
3 - кол-во знаков после запятой.
Так же здесь много интересного можно узнать:
http://ru.wikipedia.org/wiki/Printf