Помогите с printf

Тема в разделе "WASM.ASSEMBLER", создана пользователем Codeblight, 30 май 2006.

  1. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    C++. использую printf через макрос _stprintf (чтобы юникод и анси компилить), необходимо распечатать double.



    проблемы нет - _stprintf(buff, _TEXT("%f"), value), но эта чудо-функция печатает 6 нулей после запятой, при варианте %.Nf можно отпечатать N символов после запятой, но мне надо что-то аналога FloatToString в Deplhi - чтобы после запятой печаталось столько знаков, сколько их реально есть. Вариант с %lg обрезает знаки после запятой на свое усмотрение, а иногда делает "Ё" вариант числа со степенью (что совсем не к месту). Конечно, можно отпечатать как %.31f а далее прокатиться по строке и отрезать лишние нули, но я так сделать не могу, т.к. слишном много где код придется править :)



    Скажите, какой самый простой вариант отпечатать реальное число знаков после запятой функцией printf ?



    p.s. Пока мысли идут в сторону перекрытия макроса _stprintf и ручного отрезания нулей.
     
  2. Myk

    Myk New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2004
    Сообщения:
    35
    Адрес:
    Ukraine
    вручную
     
  3. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    т.е. нет стандартных ключиков каких-то в с++ ?
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Видимо, нет. Но отрезать нули не так уж и сложно в одну строку уложишься.
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Codeblight



    Если параметр является float, то формат не должен содержать суффикс l.





    Чтобы этого избежать достаточно задать значение точности побольше (больше максимальной степени параметра):
    Код (Text):
    1. %.5g




    Правда, если степень слишком большая, в конце появятся мусорные значения из-за неточности FPU.
     
  6. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    у меня double, а %.15g я делал и не помогло :)
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine


    Почему тогда в начале было так?







    Что значит "не помогло"? Всё ещё выводится E нотация? - повысь точность. Слишком много "мусора" после запятой? - понизь точность. Не ленись экспериментировать.
     
  8. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    %f в VC работает так же как %lf :) (как мне визуально показалось)



    Вообщем буду эксперементировать *-)
     
  9. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    причем здесь C++?!?!?!

    это С! если в контексте С++, то это будет не stdio.h, а iostream
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Без разницы. Главное, что в ключе компилятора - TC или TP.