Перейти к содержанию
    

C18 Ограничения sprintf

Добрый день. У меня есть число типа 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". Не знаю, как быть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

читать здесь
Из википедии может сложиться впечатление, что форматные строки printf и scanf одинаковые, потому что для scanf там рассмотрены самые примитивные случаи. На самом деле форматные строки существенно отличаются, поэтому читать лучше здесь. Дома попробую найти ссылку на еще более подробное описание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...