Вывод чисел с плавающей точкой на жк дисплей? Имеется две функции, одна выводит на экран целое число, другая одно число после точки. Вторая функция не работает, то есть выводит просто ноль, но если во вторую функцию передать аргумент без целого числа то все работает без проблем.void return_celoe(double data) { double ostatok, celoe,data1; unsigned char otvet,mass[10],count=1, mass1; ostatok=modf(data, &celoe); otvet=celoe; data1=celoe; if(otvet==0) lcd_dat(0x30); while(otvet>0) { data1/=10.0; otvet=data1; ostatok=modf(data1, &celoe); mass1=ostatok*10.0+0x30; mass[count]=mass1; count++; } while(count>1) { lcd_dat(mass[--count]); } } void return_ostatok(double data) {
double ostatok, celoe, data1=data; int otvet, sto; ostatok=modf(data1, &celoe); otvet=ostatok*10.0; lcd_dat(otvet+0x30); } int main(void) { lcd_init(); return_celoe(7990324.9); /*НА РАЗНИЦУ МЕЖДУ ЦЕЛЫМИ ЧИСЛАМИ НЕ ОБРАЩАЙТЕ ВНИМАНИЯ*/ lcd_dat('.'); return_ostatok(7999.9); /*ЗДЕСЬ ЕСЛИ НАПИСАТЬ НЕ 7990324.9 А 0.9 ТО ВСЕ РАБОТАЕТ, ТАКЖЕ ЕСЛИ ПЕРЕДАТЬ 7999.9 ТО НА ЭКРАН ВЫВОДИТСЯ 7999.8 А ЕСЛИ 799.9 ТО ТАК ЖЕ 799.9 ПОЧЕМУ ТАК? */
} Как я думаю чем больше целое число тем больше остаток растягивается
на 10 и в итоге может быть округлен в меньшую сторону. Возможно, это происходит из-за специфики представления чисел с плавающей точкой в памяти компьютера. Для более точного вывода чисел с плавающей точкой на жк дисплей, можно попробовать использовать другой подход или библиотеки для работы с числами с плавающей точкой.
на 10 и в итоге может быть округлен в меньшую сторону. Возможно, это происходит из-за специфики представления чисел с плавающей точкой в памяти компьютера. Для более точного вывода чисел с плавающей точкой на жк дисплей, можно попробовать использовать другой подход или библиотеки для работы с числами с плавающей точкой.