Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 1
Регистрация: 12.11.2013
Сообщений: 11
1

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

25.01.2014, 21:57. Показов 2385. Ответов 17
Метки нет (Все метки)

Надо вывести long double число без перевода в double. Пишу:
C++
1
printf("%Lf",S);
и выводится неверно. Компилятор -- MinGW, та же фишка на VS работала. Что же делать?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2014, 21:57
Ответы с готовыми решениями:

Почему перестает работать программа при замене double на long double?
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете,...

long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это...

Количество знаков после запятой double, Long double
Есть число большой точности A. A=-1.768573656315270993281 742915329544712934120053405549882...

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include<iostream> #include<cmath> #include<cstdlib> using namespace std;...

17
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16828 / 6706 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.01.2014, 22:01 2
А если добавить "-D__USE_MINGW_ANSI_STDIO" к опциям компиляции ?
0
1 / 1 / 1
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 22:12  [ТС] 3
Не помогает.
То же самое:
warning: unknown conversion type character 'L' in format
0
125 / 125 / 59
Регистрация: 22.01.2014
Сообщений: 460
25.01.2014, 22:22 4
На gcc дожно было сработать.
А вот так вы не пробывали?
C++
1
2
    long double S=3.14;
    cout<<"S:"<<S;
0
1 / 1 / 1
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 22:26  [ТС] 5
Нет, там надо с определённой точностью, чего iostream, вроде бы, не может.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16828 / 6706 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.01.2014, 22:32 6
Цитата Сообщение от HEDO4EJIOBEK Посмотреть сообщение
чего iostream, вроде бы, не может.
а разве precision - это не то?

Добавлено через 1 минуту
http://www.cplusplus.com/refer... precision/
0
3413 / 2772 / 751
Регистрация: 25.03.2012
Сообщений: 10,081
Записей в блоге: 1
25.01.2014, 22:40 7
Не в курсе, форматная строка принтф разве не требует именно строчные буквы %lf ?
А для потоков iostream надо использовать setprecision.
0
1 / 1 / 1
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 22:41  [ТС] 8
Нет, совсем не то. Если поставить, например, на 7, то при выводе «444.4444444», то выведется «444.4444», а нужно фиксированное количество знаков после запятой.
0
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
25.01.2014, 22:43 9
Цитата Сообщение от HEDO4EJIOBEK Посмотреть сообщение
Нет, совсем не то. Если поставить, например, на 7, то при выводе <<444.4444444>>, то выведется <<444.4444>>, а нужно фиксированное количество знаков после запятой.
Перед этим нужно применить манипулятор std::fixed
C++
1
2
std::cout.precision(4);
    std::cout << std::fixed << 3.3333333333 << std::endl;
0
3413 / 2772 / 751
Регистрация: 25.03.2012
Сообщений: 10,081
Записей в блоге: 1
25.01.2014, 22:45 10
printf("%.7lf", ...
0
1 / 1 / 1
Регистрация: 12.11.2013
Сообщений: 11
25.01.2014, 22:46  [ТС] 11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Не в курсе, форматная строка принтф разве не требует именно строчные буквы %lf ?
Нет, по крайней мере, в MinGW для long double требуется именно «%Lf».
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А для потоков iostream надо использовать setprecision.
Нет, совсем не то. Если поставить, например, на 7, то при выводе «444.4444444», то выведется «444.4444», а нужно фиксированное количество знаков после запятой[2].
0
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
25.01.2014, 22:47 12
Цитата Сообщение от HEDO4EJIOBEK Посмотреть сообщение
чего iostream, вроде бы, не может.
да иострим и не такое может, уж поверьте
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16828 / 6706 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.01.2014, 22:48 13
Kuzia domovenok, не везде, как видите.. http://stackoverflow.com/quest... ong-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').
0
3413 / 2772 / 751
Регистрация: 25.03.2012
Сообщений: 10,081
Записей в блоге: 1
25.01.2014, 23:14 14
KOPOJI, мда, и где тут логика? Зачем делать l для длинных целых, а L для длинных даблов? Неужели реализация printf не поймёт, что, увидев в форматной строке %l, надо просто проверить следующий символ: lf или ld, чтобы определить тип аргумента!
0
KOPOJI
25.01.2014, 23:15
  #15

Не по теме:

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

0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,537
Записей в блоге: 30
26.01.2014, 15:02 16
HEDO4EJIOBEK, для полноты картины приведи всю программу и результат исполнения

На всякий случай соответствие printf'ов и cout'ов
https://www.cyberforum.ru/blogs/18334/blog507.html
1
1 / 1 / 1
Регистрация: 12.11.2013
Сообщений: 11
26.01.2014, 18:27  [ТС] 17
Всем спасибо, теперь всё ясно. Только с printf()ом не разобрался -- так и не хочет выводить long double.
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,537
Записей в блоге: 30
26.01.2014, 18:48 18
Цитата Сообщение от HEDO4EJIOBEK Посмотреть сообщение
Только с printf()ом не разобрался -- так и не хочет выводить long double
Я же говорю - покажи на всякий случай всю программу. Мало ли ты ошибаешься. До кучи ещё исполни такую программу:

C
printf ("%ld\n", sizeof(double));
printf ("%ld\n", sizeof(long double));
а то мало ли на твоём компиляторе long double эквивалентен double'у (такое бывает)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2014, 18:48

Double, int , long double
Как вычислить диапазоны типов вручную указанных в название темы?

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double Akk(double x, double y, double...

Преобразовать 2 числа int в 1 число float(double) | double int1.int2
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их...

Чем различаются long long и long double?
long long или long double


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.