атой с максами и двойниками - PullRequest
2 голосов
/ 16 мая 2011

Могу ли я использовать atoi для преобразования ввода текста в диалоговое окно в двойное число?

Мне нужно выполнить вычисления для нескольких двойных значений, которые были введены с помощью диалогового окна.Я знаю только «atoi», но это только для целых чисел?

Ответы [ 6 ]

2 голосов
/ 16 мая 2011

Как и в atoi (), вы можете использовать double atof ( const char * str ) Ссылка

1 голос
/ 16 мая 2011

Предполагая, что Boost является опцией, Boost.lexical_cast является популярным подходом для преобразования в и из строковых представлений числовых значений, например:

char const s[] = "1.2345";
try
{
  double d = boost::lexical_cast<double>(s);
  ...
}
catch (boost::bad_lexical_cast &)
{
  ...
}
1 голос
/ 16 мая 2011

Вы можете использовать std::stringstream как:

std::stringstream ss(text);
double value;
if ( !( ss >> value ) )
{
   std::cout << "error : text is not double" << std::endl;
}
1 голос
/ 16 мая 2011

Если вы действительно используете C ++ (а не только C), то вы можете анализировать текст в float, используя stl's std :: istringstream .

1 голос
/ 16 мая 2011
0 голосов
/ 16 мая 2011

Оба atoi и atof более или менее сломаны;нет никакого способа сделать какую-либо проверку ошибок.В большинстве случаев самым простым решением было бы использовать strtod:

char* endPtr;
errno = 0;
value = strtod( input, &endPtr );
if ( errno != 0 || *skipSpaces( endPtr ) != '\0' )
    //  Illegal input, conversion failed.

(я обычно фанат istringstream, но в этом случае это кажется излишним.)

...