Здравствуйте, такой вопрос. В программе имеются переменная - настроечный коэффициент, типа double, к примеру, consKp=0.044 Мне необходимо иногда его редактировать, целую и дробную часть, то есть число отображается на дисплее, кнопками влево вправо нужно двигать курсор по разрядам, а кнопками вверх вниз соответственно увеличивать и уменьшать разряд, под которым курсор. При этом при каждое изменение должно сохраняться. Ума не приложу как это можно сделать, помогите пожалуйста, натолкните на мысль. Спасибо.
Храните в памяти поразрядное представление числа, по кнопкам меняете опять его и обновляете отображение на дисплее, а потом, когда нужно использовать как одно число, - собираете все отдельные разряды в одну переменную double суммированием.
То есть мне нужно число представить в виде строки или массива, каждый элемент которого есть разряд числа?
Да, это называется BCD кодировка Так будет реально проще, особенно для числа, которое должно стать числом с плавающей точкой - избежите возможных фокусов представления числа
Да, это я перемудрил. Ничего преобразовывать вообще не надо. Кнопками вправо, влево просто менять шаг приращения или убавления по закону 0.001, 0.01, 0.1, 1, а кнопками вверх вниз соответственно прибавлять или удалять. Спасибо за помощь!
Это на самом деле довольно корявое решение, хоть и выглядит просто. Дело в том, что в двоичном представлении (внутри double) нет полного соответствия десятичному представлению и при таких манипуляциях будет накапливаться ошибка. К тому же, у вас появляется куча ненужных вычислений, связанных с преобразованием double в строку (а то и обратно).
Не понимаю зачем преобразовывать. Переменная double будет храниться в eeprom, при инициализации она будет считана, а кнопками буду прибавлять или удалять к ней либо 0.001 либо 0.01, либо 0.1, либо 1, в зависимости от того какой разряд надо изменить, а дисплей лишь выводит эту переменную, ну и курсор подставлять в редактируемый разряд. Поясните, где я ошибаюсь, на самом деле не понимаю зачем над числом делать преобразования в строку и обратно.
Когда вы выводите double на дисплей вы так или иначе преобразуете его в строку. Обратного преобразования в этом случае нет, конечно. Но это не главное. Просто хотел предупредить об ошибках округления, которые у вас неизбежно будут при таком способе редактирования числа. Скорее всего, длины double хватит, чтобы до значимых разрядов это не дошло.