1

次の関数は文字列を double に変換しますが、精度が十分ではありません。

double stringToDouble(string s) {
    double d;
    stringstream ss(s); //turn the string into a stream
    ss >> d; //convert
    return d;
}

stringToDouble("31.2458782523") で呼び出すと、出力は 31.2459 になります。

Boost ライブラリを使用せずにこれを改善する方法はありますか? より高い精度が欲しい。できるだけ高く。

4

2 に答える 2

3

double正しく解析されますが、間違った精度で表示されている可能性があります。どのように出力しますか?必要に応じて精度を調整すれば、問題ありません。

floatまた、浮動小数点数はメモリ内で常に正確に表現できるとは限らないため、 orを使用すると (小さな) 丸め誤差が発生する可能性があることを知っておく必要がありますdouble。ただし、月にロケットを送る予定がない限り、通常は無視しても問題ありません。

于 2013-03-09T20:35:55.947 に答える
2

C++11 を使用している場合は、std::stodを使用できます。

stod = Sストリング から ダブル_

double myDouble = std::stod(myString);

これにより、比較的まともな精度が得られるはずです。

さらに高い精度が必要な場合は、long-double に std::stold を使用できます。

于 2013-03-09T22:27:24.250 に答える