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

Long double отображается не верно - C++

Восстановить пароль Регистрация
 
Dvarik
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 4
28.05.2014, 15:15     Long double отображается не верно #1
суть проблемы такова:
решаю задачу где вводится некое значение long double, большое значение, которое в последствии переводится в string
так вот компилятор long double постоянно округляет, то есть если я ввожу 123456,789, то получаю 123457, вот это значение и присваивается типу string.
как можно решить данную проблему, пробовал это как на microsoft visual С++, так и на более новом microsoft visual studio, результат такой же

тут моя попытка решения(задача не закончена), может сам где-то накосячил:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//glava 7 zadacha 11
#include<iostream>
#include<windows.h>
#include<math.h>
#include<sstream>
using namespace std;
/////////////////////////////////////////////////
static const int i = 20;
/////////////////////////////////////////////////
 
class ldtoms
{
private:
    long double ld_input;
    //long double ld_output;
public:
    void do_work()
    {
        int dlina_proverka = 0;
        int index_zpt;
        while ( dlina_proverka != 1 )
        {           
            cout << "ââåäèòå âåëè÷èГ*Гі äëÿ ïåðåâîäГ* Гў äåГ*ГҐГ¦Г*ûé ôîðìГ*ГІ:  ";
            cin >> ld_input;
            printf("%f \n", ld_input);
            cout << "ld_input = " << ld_input << endl;
            if (ld_input < 100000000000000000)
            {
                dlina_proverka = 1;
            };
        };
        cout << "ïðîâåðêГ* ïðîéäåГ*Г* ГіГ±ГЇГҐГёГ*Г®" << endl;
        ostringstream oss;
        oss << ld_input << ends;
        string ustring = oss.str();
        printf("%s \n", ustring.c_str());
        cout << "ustring = " << ustring << endl;
        index_zpt = ustring.length();
        for (int i = 0; i < ustring.length(); i++)
        {
            cout << i << ' ' << ustring[i] << endl;
            if (ustring[i] == '.')
            {
                index_zpt = i;
            };
            /*else
            {
                index_zpt = ustring.length();
            };*/
        };
        cout << "index_zpt = " << index_zpt << endl;
    };
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int a;
    ldtoms money_long;
    money_long.do_work();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 15:15     Long double отображается не верно
Посмотрите здесь:

описание long double в С C++
Округление Long double. C++
C++ Long Double
Double, int , long double C++
C++ long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,581
28.05.2014, 15:27     Long double отображается не верно #2
Насколько длинные числа ты вводишь?
У Microsoft, насколько я помню, long double и double - одно и то же.
Dvarik
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 4
28.05.2014, 15:32  [ТС]     Long double отображается не верно #3
по условию не больше 9 999 999 999 999 999,00
nmcf
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,581
28.05.2014, 15:48     Long double отображается не верно #4
У double 15-16 значащих цифр. Всё остальное будет округляться.
Dvarik
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 4
28.05.2014, 15:50  [ТС]     Long double отображается не верно #5
почему же тогда 123456,789 округляется до 123457?
причем через printf отображается верно, а присваивает урезанный вариант
nmcf
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,581
28.05.2014, 16:29     Long double отображается не верно #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Добавь
C++
1
#include<iomanip>
34-ю строку сделай так:
C++
1
        oss << setprecision(15) << ld_input << ends;
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
28.05.2014, 16:30     Long double отображается не верно #7
А если так переводить?
C++
1
2
3
4
5
6
7
8
int main()
{
   long double val = 123456.789;
   std::string str = std::to_string(val);
   std::cout << str << "\n";
 
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2014, 16:41     Long double отображается не верно
Еще ссылки по теме:

long double и char C++
C++ Вывести long double число без перевода в double
Почему перестает работать программа при замене double на long double? C++

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

Или воспользуйтесь поиском по форуму:
Dvarik
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 4
28.05.2014, 16:41  [ТС]     Long double отображается не верно #8
to DiffEreD
по условию нужно преобразовать используя ostrstream (то что ostrstream и ostringstream не одно и тоже в курсе, но ostrstream компилятор ни в какую не принимает)

to nmcf
помогло, спасибо огромное
Yandex
Объявления
28.05.2014, 16:41     Long double отображается не верно
Ответ Создать тему
Опции темы

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