2016-12-11 2 views
-1

J'essaye de prendre des chaînes de vecteurs et de les convertir en double en utilisant stringstream. Cependant, quand je cours ce code:Comment convertir des chaînes en doubles en C++ en utilisant stringstream

double tempDob; 
    stringstream ss; 
    ss << tempVec[3]; 
    ss >> tempDob; 

Je reçois des trucs bizarres au lieu d'un double normal. Voici un exemple: cordes d'origine (Cout de tempVec [3]):

 15000000 
62658722.54 
91738635.67 
     20 
     29230756.5 
     12 

double converti (de cout de tempDob):

1.5e+07 
6.26587e+07 
9.17386e+07 
2.92308e+07 
4.70764e+07 
3.53692e+07 

Comment puis-je obtenir ces chaînes converties correctement doubles par stringstream ? Merci!

+0

Mieux poster un [mcve]. – juanchopanza

+0

Vous réalisez que '15000000' est égal à' 1.5e + 07'; la seconde est "1,5 multiplié par 10 à la puissance 7". –

Répondre

0

Comme ceci:

istringstream is(somestring); 
double d; 
is >> d; 

même si bien sûr votre propre code aura la gestion des erreurs.

+0

Et cela fait quoi réellement? –

+0

Précision et comment faire le formatage est en question? –

+0

@ πάντα ῥεῖ Il convertit le premier espace séparé en jeton en un double, si possible. –

0

Vous pouvez utiliser la même stringstream à plusieurs reprises comme ceci:

std::vector<std::string> theVec { "  15000000", 
            "62658722.54", 
            "91738635.67", 
            "  20", 
            "  29230756.5", 
            "  12" }; 
std::stringstream ss; 
for (auto const& s : theVec) 
{ 
    ss.clear(); 
    ss.str(s); 
    double d; 
    ss >> d; 
    std::cout << d << "\n"; 
} 
+0

Merci, bon à savoir. Cette fois si je l'utilise dans une boucle for avec ss.clear() –

+0

@JamesHall 'ss.clear()' est nécessaire, je l'ai ajouté, mais notez qu'il ne supprime pas la chaîne, mais seulement les drapeaux. Ceci est différent de 'std :: string :: clear' etc. –