![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Как преобразовать double в строку?
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Лучшее из всех решений, на мой взгляд (как ни крути), это всё-таки использование функций семейства printf. В 10-ке MS даже специально поправила вывод форматов для чисел с плавающей точкой, ибо он уступал варианту от UNIX. Другая возможность - написать соответствующую функцию самому, но точность вывода будет уступать (если не применять соответствующие алгоритмы).
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Худшее, а не лучшее. Во-первых чтоб написать, надо долго рыться по справочнику кодов форматирующей строки. Во-вторых ваще не понятно, как задать точность. В-третьих для замены точки на запятую нудо отдельно разбирать результат. Зачем? Можно ведь сразу при разборе числа поставить правильный разделитель. В-четвёртых ваше не понятно, как задать, что до такого то порядка вывод должне быть в формате фиксированной запятой ("31.415"), а с такого то-порядка с плавающей (3.1415*10^18). В-четвёртых не понятно, как поставить "*10^" вместо буквы E. В-пятых она не проверяет буфер. В-шестых буфер надо отдельно приводить к std::wstring. В-седьмых она ещё и уязвима.
Это сообщение отредактировал(а) TarasProger - 16.8.2015, 16:29 |
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Дело Ваше. У Вас какая-то патологическая нелюбовь к стандартным решениям, что к стандартной библиотеке, что к printf. Разубеждать Вас не буду.
Именно об этом я и говорю:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| TarasProger |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Вроде отладил. Но покритикуйте ещё.
Добавлено через 2 минуты и 25 секунд
Это сообщение отредактировал(а) TarasProger - 16.8.2015, 19:28 |
||||
|
|||||
| disputant |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 28.11.2011 Репутация: нет Всего: 3 |
Страуструп советует использовать вывод в stringstream, кстати... |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
И чем же оно лучше стандартного решения? ООП-ного, надёжного и безопасного.
Добавлено @ 07:47 disputant, а как задать точность преобразования и заставить его выводить не значащие ноли в конце?
Buffer<<Value; Buffer<<L' '; Buffer>>Result; return Result;[/code] точность ограничивает, Value=3.14, результат 3.1, но Buffer.precision(8); Buffer<<Value; Buffer<<L' '; Buffer>>Result; return Result;[/code] выводит 3.14 вместо 3.1400000. Как задать разделитель целой и дробной части? Это сообщение отредактировал(а) TarasProger - 17.8.2015, 07:56 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Тем, что не использует никаких стандартных решений -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Курсант |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Уважаемый TarasProger, мне очень нравится Ваш стиль программирования, в нём чувствуется будущий хороший специалист. Хотя и заметно, что программирование является для Вас чем-то новым, Вы отлично улавливаете суть, у Вас есть творческая струнка, которая звенит, и это здорово. Но... Примите к сведению, что сейчас у Вас необходимый этап развития - изобретение велосипедов на квадратных колёсах. Хотя колёса у Ваших велосипедов не такие уж и квадратные. На мой взгляд, это лучше, чем бездумное использование чужих решений. Главное - не перегнуть палку в этом вопросе, изучать стандартные решения, использовать их. Если разные библиотеки типа Qt или WxWidgets - это ещё спорный момент, то такие вещи как STL (стандартная библиотека шаблонов С++), WinAPI (не уверен что злободневно) и .NET - это то, чем нужно пользоваться. Это системы с очень изящной структурой, даже поверхностное знакомство с ними учит организовывать работу сложных программ. То есть те ответы, которые Вам дают - они отличные, если говорить строго технически. Есть отличный принцип в конструировании - меньше изобретать и больше конструировать. Нужно стараться максимально агрегатировать уже написанные функции из стандартных библиотек. Они, во-первых, избавлены от ошибок многочисленными прогонами и частым использованием, во-вторых, экономят время при разработке ПО, в третьих, упрощают поддержку Ваших программ другими разработчиками, которые знакомы со стандартными решениями, и не знакомы с Вашими решениями. НО, повторюсь, то, что Вы делаете, т.е. изобретение своих библиотек - это, на мой взгляд, необходимый этап. Более того, уверен, большая часть людей, рекомендующих Вам использовать стандартные решения, сама прошла через такое вот изобретение велосипедов. Неважно в каком возрасте. Это позволяет отточить алгоритмическое мышление. Лично я Ваши посты читаю с удовольствием, хотя и понимаю, что нужно использовать стандартные механизмы. Наверное стоит сделать отдельную ветку на форуме - "изобретаем велосипед", где молодые горячие программисты будут выкладывать свой код, а опытные будут показывать, как лучше в таких случаях использовать стандартные решения. Это будет полезно всем - и опытным разработчикам (вспомнить, как писать низкоуровневые функции), и молодым (понять, как использовать стандартные решения). Пишите ещё! |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Насчет использования принтф с C++, да оно конечно не вписывается в стройную систему C++ никаким боком.
И Страуструп конечно будет советовать против. Но... по удобству использования и эффективности полученного кода, она даст мноооого очков вперед форы выводу в stringstream и иже с ними. Ну а вообще это холивар... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Поэтому добрые люди изобрели lexical_cast<> чтобы упростить эту конструкцию. Хотя я против использования кучи в таких тривиальных задачах. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| disputant |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 28.11.2011 Репутация: нет Всего: 3 |
Ну это же поток, так что <iomanip> вам в помощь!... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |