Форум программистов, компьютерный форум CyberForum.ru

Вывести long double число без перевода в double - C++

Восстановить пароль Регистрация
 
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 21:57     Вывести long double число без перевода в double #1
Надо вывести long double число без перевода в double. Пишу:
C++
1
printf("%Lf",S);
и выводится неверно. Компилятор -- MinGW, та же фишка на VS работала. Что же делать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2014, 21:57     Вывести long double число без перевода в double
Посмотрите здесь:

Округление Long double. C++
C++ Long Double
C++ Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
Double, int , long double C++
C++ long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
25.01.2014, 22:01     Вывести long double число без перевода в double #2
А если добавить "-D__USE_MINGW_ANSI_STDIO" к опциям компиляции ?
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 22:12  [ТС]     Вывести long double число без перевода в double #3
Не помогает.
То же самое:
warning: unknown conversion type character 'L' in format
nikolay1982
92 / 92 / 38
Регистрация: 22.01.2014
Сообщений: 310
25.01.2014, 22:22     Вывести long double число без перевода в double #4
На gcc дожно было сработать.
А вот так вы не пробывали?
C++
1
2
    long double S=3.14;
    cout<<"S:"<<S;
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 22:26  [ТС]     Вывести long double число без перевода в double #5
Нет, там надо с определённой точностью, чего iostream, вроде бы, не может.
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
25.01.2014, 22:32     Вывести long double число без перевода в double #6
Цитата Сообщение от HEDO4EJIOBEK Посмотреть сообщение
чего iostream, вроде бы, не может.
а разве precision - это не то?

Добавлено через 1 минуту
http://www.cplusplus.com/reference/i.../setprecision/
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.01.2014, 22:40     Вывести long double число без перевода в double #7
Не в курсе, форматная строка принтф разве не требует именно строчные буквы %lf ?
А для потоков iostream надо использовать setprecision.
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 22:41  [ТС]     Вывести long double число без перевода в double #8
Нет, совсем не то. Если поставить, например, на 7, то при выводе «444.4444444», то выведется «444.4444», а нужно фиксированное количество знаков после запятой.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.01.2014, 22:43     Вывести long double число без перевода в double #9
Цитата Сообщение от HEDO4EJIOBEK Посмотреть сообщение
Нет, совсем не то. Если поставить, например, на 7, то при выводе <<444.4444444>>, то выведется <<444.4444>>, а нужно фиксированное количество знаков после запятой.
Перед этим нужно применить манипулятор std::fixed
C++
1
2
std::cout.precision(4);
    std::cout << std::fixed << 3.3333333333 << std::endl;
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.01.2014, 22:45     Вывести long double число без перевода в double #10
printf("%.7lf", ...
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 22:46  [ТС]     Вывести long double число без перевода в double #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Не в курсе, форматная строка принтф разве не требует именно строчные буквы %lf ?
Нет, по крайней мере, в MinGW для long double требуется именно «%Lf».
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А для потоков iostream надо использовать setprecision.
Нет, совсем не то. Если поставить, например, на 7, то при выводе «444.4444444», то выведется «444.4444», а нужно фиксированное количество знаков после запятой[2].
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.01.2014, 22:47     Вывести long double число без перевода в double #12
Цитата Сообщение от HEDO4EJIOBEK Посмотреть сообщение
чего iostream, вроде бы, не может.
да иострим и не такое может, уж поверьте
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
25.01.2014, 22:48     Вывести long double число без перевода в double #13
Kuzia domovenok, не везде, как видите.. http://stackoverflow.com/questions/4...nd-long-double
From the printf manpage:

l (ell) A following integer conversion corresponds to a long int or unsigned long int argument, or a following n conversion corresponds to a pointer to a long int argument, or a following c conversion corresponds to a wint_t argument, or a following s conversion corresponds to a pointer to wchar_t argument.

and

L A following a, A, e, E, f, F, g, or G conversion corresponds to a long double argument. (C99 allows %LF, but SUSv2 does not.)

So, you want %Le , not %le
...........
Yes -- for long double, you need to use %Lf (i.e., upper-case 'L').
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.01.2014, 23:14     Вывести long double число без перевода в double #14
KOPOJI, мда, и где тут логика? Зачем делать l для длинных целых, а L для длинных даблов? Неужели реализация printf не поймёт, что, увидев в форматной строке %l, надо просто проверить следующий символ: lf или ld, чтобы определить тип аргумента!
KOPOJI
25.01.2014, 23:15
  #15

Не по теме:

Kuzia domovenok, а я же откуда знаю, где тут логика.. Спросите у разрабов MinGW..

Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
26.01.2014, 15:02     Вывести long double число без перевода в double #16
HEDO4EJIOBEK, для полноты картины приведи всю программу и результат исполнения

На всякий случай соответствие printf'ов и cout'ов
http://www.cyberforum.ru/blogs/18334/blog507.html
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
26.01.2014, 18:27  [ТС]     Вывести long double число без перевода в double #17
Всем спасибо, теперь всё ясно. Только с printf()ом не разобрался -- так и не хочет выводить long double.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2014, 18:48     Вывести long double число без перевода в double
Еще ссылки по теме:

Почему перестает работать программа при замене double на long double? C++
Преобразовать 2 числа int в 1 число float(double) | double int1.int2 C++
Почему мы пишем double x (double y)? а не через запятую double x,y C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
26.01.2014, 18:48     Вывести long double число без перевода в double #18
Цитата Сообщение от HEDO4EJIOBEK Посмотреть сообщение
Только с printf()ом не разобрался -- так и не хочет выводить long double
Я же говорю - покажи на всякий случай всю программу. Мало ли ты ошибаешься. До кучи ещё исполни такую программу:

C
printf ("%ld\n", sizeof(double));
printf ("%ld\n", sizeof(long double));
а то мало ли на твоём компиляторе long double эквивалентен double'у (такое бывает)
Yandex
Объявления
26.01.2014, 18:48     Вывести long double число без перевода в double
Ответ Создать тему
Опции темы

Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru