Позиционирование цифр

qvazio
Offline
Зарегистрирован: 23.11.2017

Здравствуйте форумчате. 

Есть вопросик от чайника. 

При выводе на ОЛЕД дисплей значения напряжения 9,9 и 10,0  указывается координата "х" и "у" верхнего пикселя позиционирования. Но если значения плавают (при нормальной работе) то изображение цифр дергается туда - сюда. Можно ли как то из например переменной типа float взять отдельно первую цифру, вторую и третью дабы спозиционировать их отдельно.

b707
Offline
Зарегистрирован: 26.05.2017

Решений. как всегда, несколько.

- Чтобы цифры всегда были на одном месте - возьмите моноширинный фонт.

- если хотите выводить разряды по отдельности - умножьте число на 10, а потом целочисленно поделите на 10  и возьмите целую часть и остаток. Кстати. заодно можно будет избавится от параметров типа float. заменив их целыми, что благотворно скажется на коде

qvazio
Offline
Зарегистрирован: 23.11.2017

Математический вариант я рассматривал, в перспективе. Но хотелось бы без особо хитроумной арифметики. А что значит "возьмите моноширинный фонт." .. Я испльбзовал бибилиотеку U8glib . ПОдскаже как это реализовать ? Или надо другую бибилиотеку ?

b707
Offline
Зарегистрирован: 26.05.2017

qvazio пишет:

Математический вариант я рассматривал, в перспективе. Но хотелось бы без особо хитроумной арифметики.

блин, ну что за тупняк! вся хитроумная арифметика - это 3 строчки

int val = value*10;  // где value - исходное значение с десятичной точкой. напр 9.8
int d1 = val/10;        // первая цифра
int d2 = val%10;    // вторая цифра

 

qvazio
Offline
Зарегистрирован: 23.11.2017

действительно тупняк.

При присвоении значения от переменной типа float к переменной типа int , последняя отбирает целоую часть. Я правильно понял ?

b707
Offline
Зарегистрирован: 26.05.2017

qvazio пишет:

При присвоении значения от переменной типа float к переменной типа int , последняя отбирает целоую часть. Я правильно понял ?

попробуйте.

qvazio
Offline
Зарегистрирован: 23.11.2017
int val = value*10;        // где value - исходное значение с десятичной точкой. напр 9.8
int d1 = val/100;          // первая цифра
int d2 = ((val%100)/10);   //  вторая цифра
int d3 = val%10;           //   третья цифра

С учётом того что значение может быть 12.3 получилось вот так. А далее когда первыя цифра снавится "0" нулём я её заменяю символом пробела. Потом раскидываю каждую на своё место, и теперь они не прыгают. =)

Так что всё получилось. Спасибо вам b707