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

Не работает strtold - C++

Восстановить пароль Регистрация
 
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
27.03.2014, 12:53     Не работает strtold #1
Нужно перевести строку в формате $123456789.99 в число long double.
Пытался сделать с _atold(char*), но ее нет.

Код:
Кликните здесь для просмотра всего текста
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
 
long double mstold(char str[])
{
    const int NUM_LEN = 100;
    char number[NUM_LEN];
    int str_len = strlen(str);
    int j = 0;
    for(int i = 0; i < str_len; ++i)
    {
        if(str[i] >= '0' && str[i] <= '9')
            number[j++] = str[i];
    }
    number[j] = '\0';
    long double result_num = strtold(str, NULL);
    return result_num;
}
 
int main()
{
    const int STR_SIZE = 128;
    char choice;
    do
    {
        char str[STR_SIZE];
        cout << "Enter a money string: ";
        cin >> str;
 
        cout << str << endl;
 
        long double dd = mstold(str);
        cout << dd << endl;
 
        cout << "One more try? (y/n) ";
        cin >> choice;
    } while(choice == 'y');
    return EXIT_SUCCESS;
}
Изображения
 
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.03.2014, 13:06     Не работает strtold #2
MarVaL, так надо вызывать с правильным параметром, т.е. с number, а не str.
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
27.03.2014, 13:16  [ТС]     Не работает strtold #3
Цитата Сообщение от Tulosba Посмотреть сообщение
MarVaL, так надо вызывать с правильным параметром, т.е. с number, а не str.
Извиняюсь, просто у меня не получилось и я изменил на вот это, изначально там стояло number, но результат тот же. Сейчас продемонстрирую

Исправил на number:
Кликните здесь для просмотра всего текста
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
 
long double mstold(char str[])
{
    const int NUM_LEN = 100;
    char number[NUM_LEN];
    int str_len = strlen(str);
    int j = 0;
    for(int i = 0; i < str_len; ++i)
    {
        if(str[i] >= '0' && str[i] <= '9')
            number[j++] = str[i];
    }
    number[j] = '\0';
    long double result_num = strtold(number, NULL);
    return result_num;
}
 
int main()
{
    const int STR_SIZE = 128;
    char choice;
    do
    {
        char str[STR_SIZE];
        cout << "Enter a money string: ";
        cin >> str;
 
        cout << str << endl;
 
        long double dd = mstold(str);
        cout << dd << endl;
 
        cout << "One more try? (y/n) ";
        cin >> choice;
    } while(choice == 'y');
    return EXIT_SUCCESS;
}
Изображения
 
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.03.2014, 13:26     Не работает strtold #4
MarVaL, всё ок http://ideone.com/iFU88h
только десятичную точку теряете при отбрасывании лишних символов.

Добавлено через 1 минуту
Проверять символ на цифру лучше через std::isdigit()
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
27.03.2014, 13:57  [ТС]     Не работает strtold #5
Цитата Сообщение от Tulosba Посмотреть сообщение
MarVaL, всё ок http://ideone.com/iFU88h
только десятичную точку теряете при отбрасывании лишних символов.
Добавлено через 1 минуту
Проверять символ на цифру лучше через std::isdigit()
Я не понимаю у меня не работает. У меня MinGW, компилирую через g++ -Wall -c

Добавлено через 1 минуту
попробовал в этом онлайн-компиляторе, там работает... как так?

Добавлено через 19 минут
попробовал скомпилировать в -std=c++0x, результат тот же.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
27.03.2014, 14:17     Не работает strtold #6
C++
1
 long double result_num = strtold(number, NULL);
number, а не str
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
27.03.2014, 14:20  [ТС]     Не работает strtold #7
Цитата Сообщение от zss Посмотреть сообщение
number, а не str
Да. Я изменил это во втором листинге... Даже если бы там стоял str, результат был бы почти таким же
А у меня вообще значения получаются 8е-238
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.03.2014, 15:23     Не работает strtold #8
Цитата Сообщение от MarVaL Посмотреть сообщение
попробовал скомпилировать в -std=c++0x, результат тот же.
Какой тот же?
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
27.03.2014, 17:04     Не работает strtold #9
В VS 2008 программа работает правильно.
Только не нашлась strtold,
заменил на strtod
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
29.03.2014, 19:34  [ТС]     Не работает strtold #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Какой тот же?
числа порядка e-259 и т.д.
А кто-нибудь пробовал компилировать в mingw
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 20:33     Не работает strtold
Еще ссылки по теме:

Русификация.Работает-супер! Обьяснитте, как это работает? C++
C++ setprecision() не работает, или работает не так как нужно
Multimap STL - работает только запись в файл, поиск в файле не работает C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.03.2014, 20:33     Не работает strtold #11
MarVaL, попробуйте просто переустановить компилятор. Возможно, обновив версию. Всё должно работать.
Yandex
Объявления
29.03.2014, 20:33     Не работает strtold
Ответ Создать тему
Опции темы

Текущее время: 08:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru