2015-02-08 2 views
0

У меня есть данные в следующей форме:запросов относительно преобразования данных из строки плавать в C++

7630000.0 
2150000.0 
5.85E7 
4810000.0 
1.863E8 
2023428.2112 
3.365126E9 

Я прочитал эту линию данных по линии и преобразованию струны в числе с плавающей точкой с использованием C++ функции atof() , Тем не менее, я считаю, что некоторые элементы данных, такие как 3.365126E9, неправильно преобразуются atof() в 18446744071562067968. Может кто-нибудь предложить, как мне сделать соответствующее преобразование?

Я использую C++ с GCC и G ++ на убунту 12.04

+0

Там пример здесь: HTTP: //www.cplusplus.com/forum/beginner/78529/ –

+0

Не знаете, почему вы используете 'atof', так как вы отметили этот C++. Вы можете читать непосредственно в float или использовать stringstream для преобразования. http://ideone.com/4hhGku –

ответ

1

С C++ 11 есть Stod, что строка в два раза.

Вот быстрый пример использования sstream:

#include <iostream> // std::cout 
#include <string>  // std::string, std::stod 
#include <sstream> //std::istring 

int main() 
{ 
    std::string example = "5.85E7"; 
    std::istringstream os; 
    os.str(example); 
    double output; 
    os >> output; 
    std::cout << output << std::endl; 
    return 0; 
} 

Более сложный метод был бы:

#include <iostream> // std::cout 
#include <string>  // std::string, std::stod 
#include <sstream> //std::istring 

double StringToDouble(const std::string & text){ 
    std::istringstream os; 
    double output; 
    os.str(text); 
    os >> output; 
    return output; 
}  

int main() 
{ 
    std::string example = "5.85E7"; 
    std::cout << StringToDouble(example) << std::endl; 
    return 0; 
} 

Более подробное описание можно найти here

Смежные вопросы