Цитата:
Сообщение от Axell_2
Подскажите как правильно реализовать операцию деления с выводом на ЛСД трех знаков после запятой..
Пример. 0001(двоичн.)/0011(двоичн.)= 0,333(десятич.)
Если делить в дв. системе(как делает мк), то получится 0 в ответе. Я так понимаю, что для таких случаев нуно сделать какое-то преобразование и получить ответ в целых числах, а затем вывести на ЛСД , но как -- я не пойму..И как вывести полученный результат в виде 0,ххх
|
Именно для Вашего примера можно так:
0001(дв) = 1(дес)
0011(дв) = 3(дес)
берем и к 1 прибавляем 1000 и получаем 1001, 1001 : 3 = 333.
Теперь для вывода на ЖКИ надо преобразовать число в строку функцией типа IntToStr(...). Полученная строка имеет конечную длину и мы это знаем. Начинаем считать символы справа, все символы начиная с 4-го сдвигаем на одну позицию в строке влево, а на место 4-го вставляем запятую. И уже полученную строку выводим в ЖКИ. НО, если 0/3 = 0, 0+1000 / 3 =333, т.е. уже не верно, ну и т.д.
А вообще-то в компиляторах эти вещи реализованы по всем законам математики и к тому же работают, только для мелких контроллеров эти вещи пожирают много ресурсов, поэтому программисты начинают придумывать разные трюки и хитрости, чтобы сохранить ресурсы и производительность. Посмотреть, например, можно в AN575 от Microchip или порыться на piclist.com и т.д. Вообще решение Вашей задачи зависит от того, что Вам на что надо делить и откуда оно берется и какой компилятор используете.
Для MikroC, если делать по всем правилам то будет выглядеть как-то так:
Код:
float ff1, ff2, ff3;
char txt[15];
......
ff1 = 1;
ff2 = 3;
ff3 = ff1/ff2;
FloatToStr(ff3, txt);
Lcd_Out(1, 1,txt);