Преобразование строки типа «2.12e-6» в двойной - PullRequest
0 голосов
/ 16 января 2011

Есть ли встроенная функция в c ++, которая может обрабатывать преобразование строки типа "2.12e-6" в double?

Ответы [ 3 ]

7 голосов
/ 16 января 2011
3 голосов
/ 16 января 2011

atof должен сделать работу. Это , как должен выглядеть ввод:

A valid floating point number for atof is formed by a succession of:

An optional plus or minus sign 
A sequence of digits, optionally containing a decimal-point character 
An optional exponent part, which itself consists on an 'e' or 'E' character followed by an optional sign and a sequence of digits. 
1 голос
/ 16 января 2011

Если вы предпочитаете использовать метод c ++ (вместо функции ac)
Используйте потоки, как и все другие типы:

#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
#include <boost/lexical_cast.hpp>

int main()
{
    std::string     val = "2.12e-6";
    double          x;

    // convert a string into a double
    std::stringstream sval(val);
    sval >> x;

    // Print the value just to make sure:
    std::cout << x << "\n";

    double y = boost::lexical_cast<double>(val);
    std::cout << y << "\n";
}

Повышение, конечно, имеет удобный ускоренный удар: lexical_cast Или написать свой собственный тривиально.

...