Программирование AVR на C. Мелкие вопросы

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

ARV писал(а):если temp представлена дробным числом, то вообще непонятно, к чему изврат: можно использовать спецификатор %f и выводить сразу и целую и дробную части.
Логично, мне нужно было сначала проверить, а потом говорить. В гцц (для ПК) строка printf("t=%i.%u\xdfC",temp,temp%1); вообще не компилится если temp имеет тип флоат (как говорит компилятор, во-первых, потому что оператор % не применяется к типам флоат и дабл). Могу предположить что изврат для того чтобы использовать более легковесную sprintf без флоат, но мне это решение также кажется корявым.
Реклама
Встал на лапы
Сообщения: 87
Зарегистрирован: Ср авг 26, 2009 15:59:39

Сообщение izmmisha »

Для такой задачи можно собственную функцию написать, что-нибудь типа:

Код: Выделить всё

void formatTemp(char *buf, float temp) {
    int temp10 = temp*10; //оставляем 1 знак после точки
    int i;
    for(i = 1000; i > 1; i /= 10) { //выводим первые три разряда
        char c = temp10/i + '0';
        *(buf++) = c;
        temp10 %= i;
    }
    *(buf++) = '.';
    *(buf++) = temp10 + '0';
   *buf = 0;
}
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»