0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
||||||
1 | ||||||
Преобразовать string в complex28.07.2015, 10:07. Показов 2756. Ответов 28
Метки нет (Все метки)
Добрый день!
Вот такая простая задачка имеется.
Как бы это поэлегантнее сделать?
0
|
28.07.2015, 10:07 | |
Ответы с готовыми решениями:
28
Как преобразовать char* в string и вывести переменную string на экран? Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' Преобразовать латинский текст string в русский текст string Нельзя преобразовать тип Tuple<string,string,string,string> к string |
28.07.2015, 12:02 | 2 | |||||
Сообщение было отмечено Ilot как решение
Решение
http://en.cppreference.com/w/c... r_ltltgtgt
Добавлено через 3 минуты
1
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
||||||
28.07.2015, 13:23 [ТС] | 3 | |||||
Отлично, спасибо.
Только у меня данные записаны без запятой. Выходит, надо запятую предварительно добавить? Добавлено через 13 минут У меня вот что получается. Более коряво, конечно.
0
|
28.07.2015, 15:13 | 4 | |||||
Сообщение было отмечено rotciv как решение
Решение
Если нет пишите свой "парсер" на том же std::stringstream или std::regex
Добавлено через 1 час 13 минут Типа
1
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
28.07.2015, 15:25 | 5 | |||||
Сообщение было отмечено rotciv как решение
Решение
1
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
|
28.07.2015, 17:13 [ТС] | 6 |
Почему-то эта конструкция спотыкается на числе 1.797693134862316e+308.
Добавлено через 7 минут Mr.X, не компилируется...
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
28.07.2015, 17:23 | 8 |
У меня в студии нормально. А новый стандарт у вас поддерживает?
Добавлено через 4 минуты ?*****
0
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
|
28.07.2015, 17:45 [ТС] | 9 |
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
28.07.2015, 19:26 | 11 |
Ну, у меня сделано, что то, что не может прочесть - оставляет нулем. При желании можно их по-другому обрабатывать.
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
28.07.2015, 19:49 | 13 |
Ну, это вы уже слишком обобщаете. Я исходил из того, что автор сам данные пишет, а потом сам же их читает, т.е. что данные по умолчанию корректны.
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
29.07.2015, 08:46 | 15 |
Ой, давайте уже поручим автору темы в качестве упражнения самому написать обработку исключений, тем более уж он-то точно знает для чего ему эта функция.
0
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
|
29.07.2015, 09:34 [ТС] | 16 |
Данные пишет другая программа, проверенная тысячами людей на протяжении десятков лет. В большинстве случаев, данные можно считать корректными.
Число 1.797693134862316e+308 близко к максимальной возможности формата double. Похоже, его принудительно назначили для параметра, не имеющего физической природы. Я вижу в справочниках, что максимальное число - 1.7е+308, и эта величина, возможно, зависит от конкретной платформы. В программе это число успешно вводится в формате double, но почему-то при преобразовании в complex<double> оно оказывается слишком большим. Можно сделать клиппинг до 1.7е+308, это на конечный результат никак не повлияет. Давайте попробуем. Но мне для начала надо разобраться с опцией С++11 (похоже, в моем компиляторе это опция -std=c++0x). Версию 5.1 системщики мне предложили поставить самому в "дом" и пользоваться оттуда. Пока еще с этим разобраться не пытался.
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
29.07.2015, 10:20 | 17 |
Ну, на 32-разрядной машине у меня выдает
std::numeric_limits<double>::max() == 1.79769313486231570000e+308 У вас та программа вывела это число с меньшим количеством значащих цифр, из-за чего 157 округлилось до 160, а это уже больше максимума, т.е. число недопустимое.
1
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
|
29.07.2015, 11:17 [ТС] | 18 |
Моя 64-битная, похоже, принципиально не хочет нули выводить.
std::numeric_limits<double>::max()1.79769313486231570814527423731704356798070567 52584499659891747680315726078002854e+308
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
29.07.2015, 11:50 | 19 |
Ну, если setprecision побольше поставите, то выведет. Мораль сей басни - что это значение не стоит использовать как специальное. Может быть проще взять 1e+308 ?
0
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
||||||
29.07.2015, 13:33 [ТС] | 20 | |||||
Я и так уже 80 поставил, что находится за гранью разумного.
Насколько я понимаю, 32- или 64-битность влияет только на адрес, формат double при этом остается неизменным. 1е+308 - можно взять, это ни на что не повлияет в данном случае. Добавлено через 1 час 11 минут С опцией std=c++0x скомпилировалось. Mr.X, я немного переделал ваш пример.
Если я даю на вход строку (1.797693134862316e+308, 1.797693134862316e+308), то только первый блок try catch срабатывает, и результат получается (1е+308, 0)
0
|
29.07.2015, 13:33 | |
29.07.2015, 13:33 | |
Помогаю со студенческими работами здесь
20
Как в Button17 объявить делегат на методы класса static string toString (Complex A) Преобразовать вводимое string в нужное string[] Не удается неявно преобразовать string в string[] Как преобразовать тип System::String ^ в string? (или что можно сделать ещё для работы перегруженного оператора ostream::operator<<) Как преобразовать string[] в string Преобразовать ArrayList<String[]> в []String Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |