たとえば、「0.10」などの 10 進数値を格納する文字列があります。これをフロートに変換したい。しかし、atof を使用してそれを行うと、得られる数値は本来あるべき値ではありません。私は、10 進数値の数値計算を含むいくつかの複雑なアルゴリズムを作成しているため、最終的な結果が失われています。
これは、私が抱えている問題を説明する簡単なコードです。ここでは、10 進数値を文字列に入れ、atof で float に変換し、cout で出力するだけです。私が得ている結果は、atof が小さな 10 進数を最終値に追加していることを示しています。
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
string value = "0.10";
float valueAsFloat = atof(value.c_str());
cout.precision(20);
cout << valueAsFloat << endl;
return 0;
}
出力は次のとおりです。
0.10000000149011611938
何か案は?Ubuntu で GNU g++ コンパイラを使用しています。問題を引き起こしているのは、このコンパイラのバグでしょうか? もしそうなら、値をフロートに変換して正しい値を取得する他の方法はありますか? ありがとう。
編集:その質問は、なぜこれが起こるのかについて部分的な説明を提供しますが、それは完全な価値を与えるものではなく、機能する場合と機能しない場合がある単一のソリューションのみを提供します. したがって、この質問を別の質問として開いておくことは有効だと思います。