2016-02-21 2 views
2

Я пытаюсь закодировать свою функцию printf(). Я хотел напечатать значения float/double. Это то, что мне удалось сделать до сих пор.Печать плавающего без использования printf() в c

static void ft_float(va_list *ap, t_flag *flags) 
{ 
    double myfloat; 
    signed long int decipart; 
    signed long int intpart; 

    myfloat = va_arg(*ap, double); 
    if (myfloat < 0) 
    { 
     ft_myputchar('-'); 
     myfloat *= -1; 
    } 
    intpart = (signed long int)myfloat; 
    ft_putnbr(intpart); 
    ft_myputchar('.'); 
    myfloat -= intpart; 
    myfloat *= 1000000; //upto 6 decimal points 
    decipart = (signed long int)(myfloat + 0.5); //+0.5 to round of the value 
    ft_putnbr(decipart); 
} 

Как вы можете видеть, по понятным причинам код работает хорошо для поплавков как 1.424352, 12313.1341414 и т.д. Но не тогда, когда значение после запятой меньше 1, например, 1.004243, 12313.0001341 и т.д.

+2

Что вы хотите сказать? – fuz

+3

Правильное преобразование чисел с плавающей точкой в ​​строки [трудно] (http://www.cs.indiana.edu/~dyb/pubs/FP-Printing-PLDI96.pdf). Кроме того, что «не работает»? Расскажите, пожалуйста, что происходит. «Это не работает» не является описанием ошибки. – fuz

+0

Нет ли более простого способа их конвертировать? – mac42

ответ

2

Функция printf может использоваться для заполнения значения нулями. Флаг 0 устанавливает, что заполнение должно быть 0, а ширина указывает минимальное количество написанных символов, при необходимости используется дополнение к левой стороне.

Просто напечатайте f decipart с форматом: "%06ld".

+0

Спасибо, что отвечает на мой вопрос.! – mac42

Смежные вопросы