2016-12-11 96 views
-1

私はベクトルから文字列を取り出し、stringstreamを使ってdouble型に変換しようとしています。しかし、私はこのコードを実行する:文字列をC++で文字列をdoubleに変換する方法

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

私は普通のダブルの代わりに奇妙なものを取得します。ここでは例を示します。 オリジナル文字列(tempVecのCOUT [3]):

 15000000 
62658722.54 
91738635.67 
     20 
     29230756.5 
     12 

変換後のダブルス(tempDobのCOUT):

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

私は正しくにstringstreamを通じてダブルスに変換し、これらの文字列を取得できますか?ありがとう!このよう

+0

ベター[MCVE]投稿します。 – juanchopanza

+0

あなたは '15000000'が' 1.5e + 07'に等しいことに気付きます。 2番目は「1.5倍の10倍のパワー」です。 –

答えて

0

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

もちろん、独自のコードは、エラーハンドリングを持つことになりますけれども。

+0

それは実際に何をするのですか? –

+0

フォーマットと精度の問題は疑問ですか? –

+0

@πάνταῥεsom可能であれば、somestringの最初のスペースで区切られたトークンをdoubleに変換します。 –

0

あなたはこのように、繰り返し同じにstringstreamを使用することができます。

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

ありがとう、お会いできて良い。今回はss.clear()でforループを使っていますが、 –

+0

@JamesHall 'ss.clear()'が必要ですが、追加しましたが、文字列をクリアするのではなくフラグだけをクリアします。これは 'std :: string :: clear'などとは異なります。 –

関連する問題