реклама на сайте
подробности

 
 
> C18 Ограничения sprintf
Auratos
сообщение Nov 3 2015, 13:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 6-10-14
Пользователь №: 83 032



Добрый день. У меня есть число типа float. Необходимо его записать в массив, дополнив целую и дробную части до определенного размера нулями. С целой частью проблем нет, дробную пока не получилось дополнить нулями. Но проблема в другом: sprintf отказывается принимать числа больше int. Подскажите, пожалуйста, как можно ли как-то обойти это ограничение? Может быть в настройках компилятора что-то включить? Среда разработки - MPLab X IDE. Вот пример кода, где я использую sprintf

Код
void main(void)
{
    float minSet1 = 0.5;
    unsigned char Setting[11] = "          ";
    NumbConverter(Setting, minSet1, 36);
}


void NumbConverter (void* destination, float numb, unsigned char numbDecimal)
{
    unsigned char* array = (unsigned char*)destination;
    unsigned int whole;
    unsigned long decimal;
    whole = numb;                                           // целая часть
    switch (numbDecimal)
    {
        case 36:
            decimal = (numb - whole) * 1000000;             // дробная часть
            sprintf((char*)array, (const far rom char*)"%03d.%06u", whole, decimal);
            break;
        case 43:
            decimal = (numb - whole) * 1000;                // дробная часть
            sprintf((char*)array, (const far rom char*)"%04d.%03u", whole, decimal);
            break;
        case 46:
            decimal = (numb - whole) * 1000000;             // дробная часть
            sprintf((char*)array, (const far rom char*)"%04d.%06u", whole, decimal);
            break;
    }
}


На выходе я получаю массив Setting с содержимым "000.000007" вместо "000.500000". Не знаю, как быть
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
megajohn
сообщение Nov 3 2015, 13:24
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



для unsigned long нужно применять lu
читать здесь
эксперементировать здесь


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01334 секунд с 7
ELECTRONIX ©2004-2016