Ви не увійшли.
Kaka, ещё раз спасибо! это реально рабочее решение!
поправил всё на рабочем коде, всё красиво и без глюков!
Kaka респектище!!! сейчас попробую на рабочем коде, но пока 10.00 не появляется... Спасибо!!!
Watchdog - да да, точно что малЮвать!
Kaka - ох не внимательный... сейчас всё перепроверю.
Простите, Вы, наверное устали. Отдохните, потом вернётесь, иначе, простите, но Вы выглядите идиотом.
хм... вот ничего не меняю, только в первом сравнении пишу
else if (X<10) {tft.print(float(int(X*100))/100,2);}
на екране два знака после запятой
ставлю так
else if (X<10) {tft.print(float(int(X*10))/10,2);}
на экране два знака после запятой
А сколько Вы хотели, если Вы сами написал двойку?
У Вас как раньше было?
else if (X<10) {tft.print(float(int(X*100))/100,2);}
else if (X<100) {tft.print(float(int(X*100))/100,1);}
Ну так и напишите по-человечески
else if (X<10) {tft.print(float(int(X*100))/100,2);}
else if (X<100) {tft.print(float(int(X*10))/10,1);}
Делов-то!
К графике нужен подход особый, особенно рисуя фруктовыми соками Ада. Нужно малевать а не печатать!
да, всё верно, два знака после запятой в обоих вариантах если
else if (X<10) {tft.print(float(int(X*10))/10,2);}
пишу
else if (X<10) {tft.print(float(int(X*10))/10,1);}
один знак после запятой
хм... вот ничего не меняю, только в первом сравнении пишу
else if (X<10) {tft.print(float(int(X*100))/100,2);}
на екране два знака после запятой
ставлю так
else if (X<10) {tft.print(float(int(X*10))/10,2);}
на экране два знака после запятой
сейчас ещё раз всё проверю...
а ещё возможно проблема в другом... а точнее в Adafruit_GFX.
сейчас специально запустил код с уменьшением значений ровных чисел.
100 - 10 - 1 (не функция а пример уменьшения) так вот, после 100 экран нарисовал 990, после обновления екрана (переход кнопками в другой блок отображения возврат обратно) отрисовала 99, то же самое с цифрой 10, после уменьшения отрисовал 90, после обновления экрана 9.
Пропечатал пробелами через сравнение, рисует правильно.
ещё... пример.
написал увеличение ровных чисел.
1-10-100 - если просто, то рисует так
1
10
100
если пытаюсь через сравнения выставить красиво с пробелами чтоб получилось
1
10
100
в результате получаю примерно такое
1
10
10
100
опять эта 10.00 в сравнении х<10
Ты ещё и читать не умеешь?
Я же тебе русским языком писал, что "если надо один знак оставить, то заменяй 100 на 10". А у тебя что написано?
else if (X<100) {tft.print(float(int(X*100))/100,1);}
Это шозанах?
Делай как сказали, только аккуратно. Это стопудово решает твою проблему. Если не получается, значит опять что-то напарил. Всё там должно быть нормально.
хм... а что показывать... так как функция сравнения мне нужна, код остался не изменным, за исключением того что было предложено:
if (X<5) {tft.print("0");}
else if (X<10) {tft.print(float(int(X*100))/100,2);}
else if (X<100) {tft.print(float(int(X*100))/100,1);}
else {tft.print("---");}
в таком варианте замена 100 на 10 на количество знаков после запятой не влияло, менял 2 и 1.
запечатал так, лишний 0 не появляется
if (X<5) {tft.print("0");}
else if (X<10) {tft.print(X,2);tft.setCursor(80,positionY+17-10); tft.print(" ");} // запечатал ячейку пробелом где лишний 0 появлялся
else if (X<100) {tft.print(X,1);}
else {tft.print("---");}
или я не понял и от функции сравнения нужно вообще отказаться? тогда как определить чему равно число и какое количество знаков выводить?
Не понял, то отбрасывание, что я тебе написал не решило проблему?
Так не бывает, ты что-то не так сделал. Показывай.
да ничего я не оправдываюсь, как то не логично функцию печати данных, форматирование значения, смешивать с математическим округлением. ну и как я и предполагал, с оператором сравнения никак не получится... float конечно хорошо, но пресловутая 10.00 всё равно появляется. а так, как надо отображать данные, меньше 10 с двумя знаками после запятой, надо использовать сравнение... а сравнение округляет... и так по кругу.
прав всё таки г0сть, с его замечательным хрустальным шаром , запечатывание лишнего 0 пока единственное решение, учитывая вышеизложенное.
всем спасибо!!! пойду искать функции подготовки формата данных до вывода на печать.
Serial.println(1.23456, 0) выводит "1" Serial.println(1.23456, 2) выводит "1.23" Serial.println(1.23456, 4) выводит "1.2346" - это не я придумал
Ну, всё правильно, выводит с округлением. Serial.println(1.65432, 0) выводит "2". Не знаю, как ты мог этого не понять.
И это, не надо оправдываться и доказывать, что ты прав. доказывай компьютеру, мне-то зачем?
да, используется Adafruit_GFX и метод затирания пробовал, не подходит, выводится много данных, код получается очень громоздким...
<stdio.h> почитаю, спасибо.
"print(X,2) означает "округлить до 2 знаков и напечатать"." ну если бы в функции принт было бы написано что округляется, даже не брался бы за такой оператор! а написано то дословно - Serial.print(val) Serial.print(val, format) - Serial.println(1.23456, 0) выводит "1" Serial.println(1.23456, 2) выводит "1.23" Serial.println(1.23456, 4) выводит "1.2346" - это не я придумал.
вот за "tft.print(float(int(X*100))/100,2);" спасибо! сейчас займусь, отпишусь.
я где то писал про округление данных?
Конечно, писал!
print(X,2) означает "округлить до 2 знаков и напечатать".
все данные идут в том виде, как они посчитаны, без округлений, они мне нужны в точном виде.
В точном виде данных типа float не бывает в природе. Они всегда округляются. На это ты и напоролся.
мне нужно при отображении на экране отсекать лишние знаки... может быть я вообще не правильно выбрал путь через оператор сравнения?
Ну, это само собой, что по уму это делается не так, но и так может работать, если написать правильно, ты просто не понимаешь как оно устроено, потому и пишешь чё попало. Сейчас-то понял в чём проблема? Осталось только её решить? Или так и не понял?
на сколько я понимаю, в коде который я использую это заложено
else if (X<10) {tft.print(" ");tft.print(X,2); tft.print(" ");}
если число 9.999 печтаем два пробела потом само число с форматом 2 знаков после запятой и печатаем пробел
Похоже, ни хрена не понял. Если "если число 9.999", то "с форматом 2 знаков после запятой" оно будет 10,00. Именно это у тебя и печатается. Так и должно быть.
Если тебе надо просто отбрасывать лишние знаки, а не округлять, та отбрасывай их сам. Вместо "tft.print(X,2);" напиши "tft.print(float(int(X*100))/100,2);" это отбросит все знаки, кроме двух. Если надо отбросить все, кроме одного, то замени 100 на 10.