|
Редактирование значения типа float, Как организовать такое? |
|
|
|
 |
Ответов
|
Feb 11 2009, 21:00
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(Alex11 @ Feb 11 2009, 23:54)  А в чем проблема? Чтобы все не сбивалось на экране, хранить придется все равно байт на символ (минимум, пол-байта, если памяти совсем нет), изменять их по стрелочкам, а затем пересчитывать в плавучку, умножая каждую цифру на соответствующий множитель (при каждом нажатии стрелочки вверх или вниз). а алгоритм можете привести? свободной памяти много...
Сообщение отредактировал clpe - Feb 11 2009, 21:01
|
|
|
|
|
Feb 11 2009, 21:26
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(Methane @ Feb 12 2009, 00:24)  Я делал. Просто вверх/вниз, увеличение скорости изменения по экспоненте (чем дольше нажатие тем быстрее изменяется, в зависимости от текущего значения - если к примеру текущее 0.01 то следующем будет 0.02 а если текущее 100, то 101). Получилось очень прикольно. Но я на семисегментниках делал. На ЖКИ может не так прикольно получится. Ага прикольно когда надо редактировать от 0.00 до 999.99
|
|
|
|
|
Feb 11 2009, 21:39
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(nl5 @ Feb 12 2009, 00:34)  Иногда делают просто выбор позиции стрелками вправо-влево, и изменение этой позиции стрелками вверх-вниз, с переносом в старшую позицию если переполняется вверх или вниз. По-моему это удобнее, чем переменная скорость, хотя кому как. вот-вот такое есть у кого нибудь?
|
|
|
|
|
Feb 12 2009, 21:33
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(demiurg_spb @ Feb 12 2009, 01:19)  Преобразуйте число в строку функцией ftoa или snprintf или dtostrf, отредактируйте строку кнопочкми и обратно из строки в число atof. ИМХО, если уж все равно присутствует плавучка, то совсем не нужно конвертировать туда-сюда, достаточно только конвертировать для вывода. А редактирование делать примерно так: Код const float vinput_delta[9] = // шаги приращения для ввода {0.0001f, 0.001f, 0.01f, 0.1f, 1.0f, 10.0f, 100.0f, 1000.0f, 10000.0f}; unsigned char vinput_step; // текущий N шага при редактировании в таблице vinput_delta ................ vinput_data -= vinput_delta[vinput_step]; // уменьшить на текущий шаг(кнопка вниз) ............... vinput_data += vinput_delta[vinput_step]; // увеличить на текущий шаг(кнопка вверх) ............... vinput_step++; // к старшему разряду(кнопка влево) .............. vinput_step--; // к младшему разряду(кнопка вправо) Это конечно упрощенно, но идея я думаю ясна.
|
|
|
|
|
Feb 13 2009, 08:37
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(singlskv @ Feb 13 2009, 00:33)  ИМХО, если уж все равно присутствует плавучка, то совсем не нужно конвертировать туда-сюда, достаточно только конвертировать для вывода. А редактирование делать примерно так: [code]const float vinput_delta[9] = // шаги приращения для ввода {0.0001f, 0.001f, 0.01f, 0.1f, 1.0f, 10.0f, 100.0f, 1000.0f, 10000.0f}; ... Это конечно упрощенно, но идея я думаю ясна. Идея-то ясна но, у float в отличие от целочисленных типов есть очень серьёзный недостаток. И заключается он в том, что точного значения числа часто не существует, а есть лишь его приближённая величина. И если прибавлять 0,1 к нулю много-много раз, можно получить что-то подобное 999999,371654651. Этим плох Ваш способ. Не смертельно плох, но всёже...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 13 2009, 11:57
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(singlskv @ Feb 13 2009, 11:41)  А когда редактируешь строку и потом переводишь в флоат разьве точность не теряется ? Даже если она и "теряется", но лишь единожды, а у Вас на каждое нажатие кнопки. По моему скромному мнению, при помощи atof достигается максимальная точность из возможных... И уж не хуже чем при целочисленном способе редактирования. В этом смысле Ваш вариант самый неудачный. atof - ведь библиотечная функция и отшлифована она не одним поколением программистов, поэтому недоверия у меня она никогда не вызывает.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 13 2009, 16:28
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(demiurg_spb @ Feb 13 2009, 14:57)  Даже если она и "теряется", но лишь единожды, а у Вас на каждое нажатие кнопки. По моему скромному мнению, при помощи atof достигается максимальная точность из возможных... И уж не хуже чем при целочисленном способе редактирования. В этом смысле Ваш вариант самый неудачный. atof - ведь библиотечная функция и отшлифована она не одним поколением программистов, поэтому недоверия у меня она никогда не вызывает. Ну давайте рассмотрим такой пример на Вашем алгоритме: Было число 1.44999999 Выводим с одним разрядом после запятой: 1.4 хотим уменьшить это число на 1 минимальный шаг(типа чего-нить регулируем) жмем кнопку вниз на младшем разряде получаем: 1.3 жмем ввод ИТОГО: было 1.44999999 стало 1.3 вместо регулирования на 0.1 получили на 0.14999999 Это правильно ?
|
|
|
|
|
Feb 13 2009, 16:58
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(singlskv @ Feb 13 2009, 19:28)  Ну давайте рассмотрим такой пример на Вашем алгоритме: Было число 1.44999999 Выводим с одним разрядом после запятой: 1.4 хотим уменьшить это число на 1 минимальный шаг(типа чего-нить регулируем) жмем кнопку вниз на младшем разряде получаем: 1.3 жмем ввод ИТОГО: было 1.44999999 стало 1.3 вместо регулирования на 0.1 получили на 0.14999999 Это правильно ?  это неправильно. однако, если только один знак после запятой в редактируемом параметре - откуда там возьмется "хвостик"? редактируется, как я понимаю, входной параметр для некоего алгоритма, но никак не выходной, т.е. получаемый в результате вычислений... то есть никакого 1.449999 быть не может (не должно по определению)? может быть только 1.4
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
Сообщений в этой теме
clpe Редактирование значения типа float Feb 11 2009, 20:48        clpe Цитата(demiurg_spb @ Feb 12 2009, 01:19) ... Feb 11 2009, 22:27         demiurg_spb Цитата(clpe @ Feb 12 2009, 01:27) В редак... Feb 11 2009, 22:32          clpe Цитата(demiurg_spb @ Feb 12 2009, 01:32) ... Feb 11 2009, 22:34           MrYuran Цитата(clpe @ Feb 12 2009, 01:34) Просто ... Feb 12 2009, 05:14         rezident Цитата(clpe @ Feb 12 2009, 03:27) В редак... Feb 12 2009, 00:17          clpe Цитата(rezident @ Feb 12 2009, 03:17) При... Feb 12 2009, 10:37           _Pasha Цитата(clpe @ Feb 12 2009, 13:37) "П... Feb 12 2009, 10:50            clpe Цитата(_Pasha @ Feb 12 2009, 13:50) В пре... Feb 12 2009, 10:56         SysRq Цитата(singlskv @ Feb 13 2009, 00:33) Код... Feb 12 2009, 23:38         _Pasha Цитата(singlskv @ Feb 13 2009, 01:33) Это... Feb 13 2009, 07:12          singlskv Цитата(_Pasha @ Feb 13 2009, 10:12) Там г... Feb 13 2009, 07:32           _Pasha Цитата(singlskv @ Feb 13 2009, 11:32) Ну ... Feb 13 2009, 07:53            singlskv Цитата(_Pasha @ Feb 13 2009, 10:53) В общ... Feb 13 2009, 08:03              singlskv Цитата(ARV @ Feb 13 2009, 19:58) это непр... Feb 13 2009, 17:52      Methane Цитата(nl5 @ Feb 11 2009, 23:34) ...и тем... Feb 11 2009, 23:34 Dog Pawlowa Цитата(clpe @ Feb 11 2009, 23:48) необход... Feb 13 2009, 07:32 MrYuran Цитата(Dog Pawlowa @ Feb 13 2009, 10:32) ... Feb 13 2009, 07:40 singlskv Цитата(Dog Pawlowa @ Feb 13 2009, 10:32) ... Feb 13 2009, 07:47 ARV для редактирования float с заранее известным число... Feb 13 2009, 09:12 _Pasha Цитата(ARV @ Feb 13 2009, 13:12) минусы:
... Feb 13 2009, 09:21 Сергей Борщ Цитата(ARV @ Feb 13 2009, 11:12) минусы:
... Feb 13 2009, 10:52  _Pasha Цитата(Сергей Борщ @ Feb 13 2009, 14:52) ... Feb 13 2009, 11:42 _Pasha А чтоб не спорить, должно быть правило: система па... Feb 13 2009, 17:58 singlskv Цитата(_Pasha @ Feb 13 2009, 20:58) А что... Feb 13 2009, 18:13  _Pasha Цитата(singlskv @ Feb 13 2009, 21:13) Ok,... Feb 13 2009, 18:21   singlskv Цитата(_Pasha @ Feb 13 2009, 21:21) В так... Feb 13 2009, 18:30    _Pasha Цитата(singlskv @ Feb 13 2009, 21:30) пол... Feb 13 2009, 18:39     singlskv Цитата(_Pasha @ Feb 13 2009, 21:39) Отред... Feb 13 2009, 18:53     ARV Цитата(_Pasha @ Feb 13 2009, 21:39) Отред... Feb 13 2009, 18:54      clpe Цитата(ARV @ Feb 13 2009, 21:54) +5! ... Feb 13 2009, 22:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|