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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
#1

Перевод long double в строку - C++

09.07.2013, 07:23. Просмотров 1689. Ответов 33
Метки нет (Все метки)

Кто мне объяснит, почему тут long double последнюю цифру дробит...
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
void ld_to_str(long double ld, char str[])
{
    double d1;
    d1 = ld;
    int j = 0, i = 0, a = 0;
    if(d1 == 0)
        str[a++] = '0';
    while(d1 >= 1)
    {
        d1 /= 10;
        j++;
    }
    while(d1 != 0)
    {
        d1 *= 10;
        i = d1;
        d1 -= i;
        if(a == j && d1 != 0)
        {
            str[a++] = ',';
            str[a++] = i + '0';
        }
        else
            str[a++] = i + '0';
    }
    str[a] = '\0';
}
Добавлено через 20 часов 2 минуты
Я имею ввиду что d1 после вычитания последней цифры приобретает вид 0,000000000000082349287349287349812734, примерно так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2013, 07:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод long double в строку (C++):

Перевод из double в long - C++
Можно ли как-то перевести число double в 2 числа long так, чтобы одно число было его целой частью, а другое дробной?

Перевод long double в string - C++
Дана задача http://www.cyberforum.ru/attachment.php?attachmentid=97778&stc=1&d=1317238135 Я не понимаю как конвертировать...

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

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

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

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

33
Croessmah
Эксперт CЭксперт С++
13409 / 7559 / 853
Регистрация: 27.09.2012
Сообщений: 18,602
Записей в блоге: 3
Завершенные тесты: 1
10.07.2013, 10:43 #16
xtorne21st,
Цитата Сообщение от xtorne21st Посмотреть сообщение
Зачем так много действий. Достаточно обойтись только std::string:
тогда уж и ld_to_str тоже упразднить:
C++
1
std::string string_value = to_string(ld);
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.07.2013, 10:53 #17
Цитата Сообщение от xtorne21st Посмотреть сообщение
у меня всё ок:
В студии?
Цитата Сообщение от Асурус Посмотреть сообщение
У меня VC++ 2010.
0
Croessmah
10.07.2013, 10:55
  #18

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
В студии?
У меня это MinGW так же норм скомпилил

0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.07.2013, 10:57 #19
Цитата Сообщение от Croessmah Посмотреть сообщение
У меня это MinGW так же норм скомпилил
mingv нормально, а в студии to_string() обрезает до 6 знаков.
0
Croessmah
Эксперт CЭксперт С++
13409 / 7559 / 853
Регистрация: 27.09.2012
Сообщений: 18,602
Записей в блоге: 3
Завершенные тесты: 1
10.07.2013, 11:01 #20
Цитата Сообщение от alsav22 Посмотреть сообщение
mingv нормально, а в студии to_string() обрезает до 6 знаков.
и MinGW тоже обрезает. Просто, наверное, построен на stringstream и берет стандартный precision + fixed
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.07.2013, 11:10 #21
Цитата Сообщение от Croessmah Посмотреть сообщение
и MinGW тоже обрезает. Просто,
У меня, в Code::Blocks, mingv не обрезает. Выводит 11 знаков.

Добавлено через 4 минуты

Не по теме:

Я вообще не понял, с чего это to_string() в 10 студии работает? Это же С++11?

0
Croessmah
10.07.2013, 11:13
  #22

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
в 10 студии работает?
может tr1 есть

0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.07.2013, 11:22 #23

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
может tr1 есть
Это что?


Если так сделать, то выводит 10 знаков:
C++
1
2
3
4
5
6
7
std::stringstream s;
s.precision(10);
    
long double ld = 12345.12345;
s << ld;
std::string string_value = s.str();
cout << string_value << endl;
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.07.2013, 11:25 #24
В VS2010 to_string() реализован через свой доморощенный sprintf_s с форматом "%Lg", что вообще выводит в научном формате, а для 123456.123456 тупо обрезает дробную часть. И получаем "123456".
В VS2012 уже сделали через ostream c ios_base::fixed, так что дробную часть выведет, но максимум 6 знаков.
0
Croessmah
10.07.2013, 11:28
  #25

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Это что?
C++ Technical Report 1

0
alsav22
10.07.2013, 11:31
  #26

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
тупо обрезает дробную часть
Дробная часть тут, наверное, ни при чём. Просто шесть знаков оставляет.

0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.07.2013, 11:40 #27
Цитата Сообщение от alsav22 Посмотреть сообщение
Дробная часть тут, наверное, ни при чём. Просто шесть знаков оставляет.
Там не всё так просто:
0
Миниатюры
Перевод long double в строку  
alsav22
10.07.2013, 12:09
  #28

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Там не всё так просто:
Как ни крути, всё равно не больше шести.

0
Tulosba
10.07.2013, 12:14
  #29

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Как ни крути, всё равно не больше шести.
Если не считать символ "e" и степень, то да.

0
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
10.07.2013, 14:06  [ТС] #30
Попробую сменить среду.

Добавлено через 33 минуты
Code::Blocks выдаёт, что to_string() не объявлен в этой области...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2013, 14:06
Привет! Вот еще темы с ответами:

Перевод из String в long long - C++
Мне нужна функция для перевода из String в long long.Функция atoi(const char* str) работает только с констатным масивом символов а мне...

Написать функцию для перевода переменной типа long в символьную строку в шестнадцатиричном представлении ( ltoah( long num, char s[]) ) и тестирующую - C++
Написать функцию для перевода переменной типа long в символьную строку в шестнадцатиричном представлении ( ltoah( long num, char s) ) и...

Long Double - C++
Разве нет типа более емкого, чем Double в Visual studio? Long Double, как я понял, определяется как обычный Double. А мне нужен аналог по...

long double и char - C++
Товарищи, помогите чайнику разобраться в данном теоретическом вопросе: long double* m=95; m--; m=? char* t=2; t-=4; t=?


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
10.07.2013, 14:06
Ответ Создать тему
Опции темы

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