| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Преобразование double в строку |
| Автор: Нитонисе 5.1.2013, 16:37 |
| Вроде вопрос простой, но что-то не найду простого решения. Есть числа double в диапазоне 0.1-0.0000000001. Нужно эти числа в таком формате и представлять текстом. Функция FloatToStrF с режимом ffGeneral не показывает числа длиннее 0.0001. Если после запятой более трех нулей, то число преобразуется в строку вида 1E-7. |
| Автор: NoviceF 5.1.2013, 17:06 | ||
Такой вариант решает вопрос?
|
| Автор: Нитонисе 5.1.2013, 17:16 |
Я работаю в RAD Studio Builder XE и там вывести текстовую величину в формате std::string я не знаю как, чтобы проверить. Надо бы получить строку в UnicodeString. Замечу, что точность double может быть любая и может образовываться мусор. Например число 0.00001 может храниться в памяти как 0.000010000000002. Вот надо этот мусор отсекать и представлять число только до единички. |
| Автор: NoviceF 5.1.2013, 17:30 |
| По быдлеру ничего не могу сказать как вариант можно умножать на 10, пока число не станет >1, тогда будет ясно, какаю точность нужно использовать для отсечения.. но это так.. мысли на тему.. скорее всего существует гораздо более элегантное решение |
| Автор: Нитонисе 5.1.2013, 17:59 | ||
Мусор - это все что после первой значащей единицы. Да я пока найду сам - тут могут быстрее подсказать. Ведь это просто, когда знаешь. |
| Автор: Dem_max 5.1.2013, 18:02 | ||
наверное как то так
|
| Автор: Нитонисе 5.1.2013, 18:20 |
Нет. Тут любое число представлено 15-ю разядами. То есть 0.001 будет представлено как 0.00100000000000. Поясню еще одну вещь. Число всегда равно единице, только у нее порядок может быть разный. Например 1E+3 или 1E-3. Нужно эти числа записывать в обычном виде - 1000 и 0.001. |
| Автор: feodorv 5.1.2013, 18:44 | ||
Дурацкий совет, наверное, но стОит тогда хранить порядок отдельно, для 1000 - это будет 3, для 0.001 - соответственно, -3. Параллельно можно содержать само число в когерентном состоянии... |
| Автор: mes 5.1.2013, 19:10 | ||||
тогда зачем тут double ? чтоб жизнь медом не казалась?
насколько я знаю, тут любят подсказывать тем, кто сам пытается найти.. плюс те кто билдер любят, они в других отделах развлекаются... |
| Автор: Нитонисе 5.1.2013, 20:02 | ||
Затем что так проще. Не буду вдаваться в подробности, потому как это уже вне топика. Как я вижу - простого решения по представлению double строкой (с учетом моих требований к этой конвертации) нет?
А я считаю, что глупо тратить время на то, что тебе могут подсказать гораздо быстрее. Это неэффективно. И странно слышать подобное на форуме программистов - людей, которые занимаются экономией времени, выполняя некоторые рутинные (и не только) действия в автоматическом режиме. Форумы на то и существуют, чтобы делиться информацией. Вы мне что-то подскажите, сэкономив время, я - вам. Взаимовыгодное общение. Только не надо говорить, что моя помощь вам как программисту не требуется. В это я охотно верю, поскольку не являюсь профессиональным программистом |
| Автор: feodorv 5.1.2013, 20:09 | ||||
Вы услышали?
|
| Автор: Нитонисе 5.1.2013, 20:27 |
| feodorv, да, видел конечно. Просто это сложный путь. У меня это число в формате double и мне удобно что бы в этом формате оно и было. Вся проблема только в его текстовом представлении. Я думал что есть что-то простое наподобие FloatToStrF. Но если нету, тогда придется мудрить. И идея представления числа в виде простого int'а обозначающего степень - не плоха. |
| Автор: mes 5.1.2013, 20:46 | ||
вот только вы одного не учитываете.. о том, что доки пересказывать неполезно для обоих, как для рассказчика, который тратит время и может не учесть нюансов, так и для спрашивающего, который получает неполную информацию, заставляющая в последствии опять же задавать вопрос подобного уровня.. где там доки по билдерским типам я не знаю, но если б подобное касалось бы стд, получили бы ссылку на доку.. все то оно так, за мелким исключением.. вот выгодно ли Вам загружать себя информацией от третьих лиц, которую еще и перепроверять нужно.. одно дело когда вы спрашиваете о методах и подходах, тут конечно лучше спросить, если гугль не находит.. А вот о том какими конструкторами или методами обладает документированный класс, спрашивать далеко не выгодно для Вас же самих.. |
| Автор: Нитонисе 5.1.2013, 20:54 |
Я понимаю, что исчерпывающий ответ можно и не получить, если это займет много времени отвечающего |
| Автор: mes 5.1.2013, 20:59 | ||
так доку от билдера не знаю, то "переформулиров" Ваш вопрос на стд : "как из си-строки получить - стд-строку? " наиболее полным и точным был бы такой : см. http://www.cplusplus.com/reference/string/string/string/ а стоит ли из за такого ответа спрашивать ? |
| Автор: feodorv 5.1.2013, 22:02 | ||||
Чем же? Нужно double, пожалуйста:
Нужна строка, пожалуйста:
|
| Автор: volatile 6.1.2013, 00:47 |
| Как вариан можно просто прецижн высчитывать пропорционально порядку числа. http://codepad.org/msYJWdID |