Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование double в строку 
:(
    Опции темы
Нитонисе
Дата 5.1.2013, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: нет
Всего: 2



Вроде вопрос простой, но что-то не найду простого решения.
Есть числа double в диапазоне 0.1-0.0000000001. Нужно эти числа в таком формате и представлять текстом. Функция FloatToStrF с режимом ffGeneral не показывает числа длиннее 0.0001. Если после запятой более трех нулей, то число преобразуется в строку вида 1E-7. 

Это сообщение отредактировал(а) Нитонисе - 5.1.2013, 16:39
PM MAIL   Вверх
NoviceF
Дата 5.1.2013, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



Такой вариант решает вопрос?

Код

#include <iostream>
#include <algorithm>
#include <sstream>
#include <iomanip>

using namespace std;

int main()
{
   double d = 0.0000000001;
   
   stringstream ss;
   
   ss.flags(std::ios::fixed);
   ss << std::setprecision(10) << d;
   
   cout << ss.str() << endl;
}

PM MAIL   Вверх
Нитонисе
Дата 5.1.2013, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: нет
Всего: 2



Цитата(NoviceF @  5.1.2013,  17:06 Найти цитируемый пост)
Такой вариант решает вопрос?

Я работаю в RAD Studio Builder XE и там вывести текстовую величину в формате std::string я не знаю как, чтобы проверить. Надо бы получить строку в UnicodeString. 

Замечу, что точность double может быть любая и может образовываться мусор. Например число 0.00001 может храниться в памяти как 0.000010000000002. Вот надо этот мусор отсекать и представлять число только до единички.
PM MAIL   Вверх
NoviceF
Дата 5.1.2013, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



По быдлеру ничего не могу сказать smile
Цитата(Нитонисе @  5.1.2013,  18:16 Найти цитируемый пост)
точность double может быть любая и может образовываться мусор

как вариант можно умножать на 10, пока число не станет >1, тогда будет ясно, какаю точность нужно использовать для отсечения.. но это так.. мысли на тему.. скорее всего существует гораздо более элегантное решение smile
PM MAIL   Вверх
mes
Дата 5.1.2013, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Нитонисе @  5.1.2013,  16:16 Найти цитируемый пост)
 Вот надо этот мусор отсекать и представлять число только до единички. 

для этого надо сформулировать правило определяющее, что есть для Вас мусор..

Добавлено через 1 минуту и 38 секунд
Цитата(Нитонисе @  5.1.2013,  16:16 Найти цитируемый пост)
Надо бы получить строку в UnicodeString. 

так гляньте в доку как конвертировать си-строки в билдеровские..



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 5.1.2013, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: нет
Всего: 2



Цитата(mes @  5.1.2013,  17:41 Найти цитируемый пост)
для этого надо сформулировать правило определяющее, что есть для Вас мусор..

Мусор - это все что после первой значащей единицы.

Цитата(mes @  5.1.2013,  17:41 Найти цитируемый пост)
так гляньте в доку как конвертировать си-строки в билдеровские..

Да я пока найду сам - тут могут быстрее подсказать. Ведь это просто, когда знаешь.
PM MAIL   Вверх
Dem_max
Дата 5.1.2013, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



наверное как то так
Код

    double dd = 0.00000003535;
    UnicodeString ustr = FloatToStrF(dd, ffNumber, 15, 15);
    Label1->Caption = ustr;



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Нитонисе
Дата 5.1.2013, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: нет
Всего: 2



Цитата(Dem_max @  5.1.2013,  18:02 Найти цитируемый пост)
наверное как то так

Нет. Тут любое число представлено 15-ю разядами. То есть 0.001 будет представлено как 0.00100000000000.

Поясню еще одну вещь. Число всегда равно единице, только у нее порядок может быть разный. Например 1E+3 или 1E-3. Нужно эти числа записывать в обычном виде - 1000 и 0.001.

Это сообщение отредактировал(а) Нитонисе - 5.1.2013, 18:25
PM MAIL   Вверх
feodorv
Дата 5.1.2013, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(Нитонисе @  5.1.2013,  19:20 Найти цитируемый пост)
Число всегда равно единице, только у нее порядок может быть разный. 

Дурацкий совет, наверное, но стОит тогда хранить порядок отдельно, для 1000 - это будет 3, для 0.001 - соответственно, -3. Параллельно можно содержать само число в когерентном состоянии...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
mes
Дата 5.1.2013, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Нитонисе @  5.1.2013,  16:59 Найти цитируемый пост)
Мусор - это все что после первой значащей единицы.

Цитата(Нитонисе @  5.1.2013,  17:20 Найти цитируемый пост)
 Число всегда равно единице, только у нее порядок может быть разный. 

тогда зачем тут double ? чтоб жизнь медом не казалась? smile

Цитата(Нитонисе @  5.1.2013,  16:59 Найти цитируемый пост)
Да я пока найду сам - тут могут быстрее подсказать. Ведь это просто, когда знаешь. 

насколько я знаю, тут любят подсказывать тем, кто сам пытается найти.. плюс те кто билдер любят, они в других отделах развлекаются... smile


Это сообщение отредактировал(а) mes - 5.1.2013, 19:11


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 5.1.2013, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: нет
Всего: 2



Цитата(mes @  5.1.2013,  19:10 Найти цитируемый пост)
тогда зачем тут double ? чтоб жизнь медом не казалась?

Затем что так проще. Не буду вдаваться в подробности, потому как это уже вне топика. Как я вижу - простого решения по представлению double строкой (с учетом моих требований к этой конвертации) нет?

Цитата(mes @  5.1.2013,  19:10 Найти цитируемый пост)
насколько я знаю, тут любят подсказывать тем, кто сам пытается найти.. плюс те кто билдер любят, они в других отделах развлекаются... 

А я считаю, что глупо тратить время на то, что тебе могут подсказать гораздо быстрее. Это неэффективно. И странно слышать подобное на форуме программистов - людей, которые занимаются экономией времени, выполняя некоторые рутинные (и не только) действия в автоматическом режиме. 
Форумы на то и существуют, чтобы делиться информацией. Вы мне что-то подскажите, сэкономив время, я - вам. Взаимовыгодное общение. Только не надо говорить, что моя помощь вам как программисту не требуется. В это я охотно верю, поскольку не являюсь профессиональным программистом smile Но ведь и вы в каких-то областях непрофессионал. Как знать, может быть задавая вопросы на непрофильных для вас форумах, но профильных для меня, - уже я вам окажу помощь smile
PM MAIL   Вверх
feodorv
Дата 5.1.2013, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(Нитонисе @  5.1.2013,  21:02 Найти цитируемый пост)
Как я вижу - простого решения по представлению double строкой (с учетом моих требований к этой конвертации) нет?

Вы услышали?
Цитата(feodorv @  5.1.2013,  19:44 Найти цитируемый пост)
наверное, но стОит тогда хранить порядок отдельно, для 1000 - это будет 3, для 0.001 - соответственно, -3. Параллельно можно содержать само число в когерентном состоянии... 




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Нитонисе
Дата 5.1.2013, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: нет
Всего: 2



feodorv, да, видел конечно. Просто это сложный путь. У меня это число в формате double и мне удобно что бы в этом формате оно и было. Вся проблема только в его текстовом представлении. Я думал что есть что-то простое наподобие FloatToStrF. Но если нету, тогда придется мудрить. И идея представления числа в виде простого int'а обозначающего степень - не плоха.
PM MAIL   Вверх
mes
Дата 5.1.2013, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Нитонисе @  5.1.2013,  19:02 Найти цитируемый пост)
А я считаю, что глупо тратить время на то, что тебе могут подсказать гораздо быстрее. 

вот только вы одного не учитываете.. о том, что доки пересказывать неполезно для обоих, как для рассказчика, который тратит время и может не учесть нюансов, так и для спрашивающего, который получает неполную информацию, заставляющая в последствии опять же задавать вопрос подобного уровня.. 
где там доки по билдерским типам я не знаю, но если б подобное касалось бы стд, получили бы ссылку на доку.. 

Цитата(Нитонисе @  5.1.2013,  19:02 Найти цитируемый пост)
 Взаимовыгодное общение.

все то оно так, за мелким исключением.. вот выгодно ли Вам загружать себя информацией от третьих лиц, которую еще и перепроверять нужно..
одно дело когда вы спрашиваете о методах и подходах, тут конечно лучше спросить, если гугль не находит.. 
А вот о том какими конструкторами или методами обладает документированный класс, спрашивать далеко не выгодно для Вас же самих.. 

Это сообщение отредактировал(а) mes - 5.1.2013, 20:55


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 5.1.2013, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: нет
Всего: 2



Цитата(mes @  5.1.2013,  20:46 Найти цитируемый пост)
вот только вы одного не учитываете

Я понимаю, что исчерпывающий ответ можно и не получить, если это займет много времени отвечающего smile Но как знать, вдруг ответ на мой вопрос прост. В этом случае тратить кучу времени на самостоятельный поиск решения - это неэффективно. Гораздо эффективнее воспользоваться подсказкой знающих людей, если для них это не трудно и не жалко smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0869 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.