浮動小数点値だけを含むchar *を浮動小数点型に変換しようとしていますが、sscanf_sとatofの両方が同じ無効な結果を生成します。sscanf_sまたはatofを使用してchar *をfloatに変換すると、精度が低下するのはなぜですか?
char t[] = "2.10";
float aFloat(0.0f), bFloat(0.0f);
sscanf_s(t, "%f", &aFloat);
bFloat = atof(t);
出力:私は無駄にその解決策を試みた答えを把握しようとする試みで同様の質問を見て
aFloat: 2.09999990
bFloat: 2.09999990
。
Converting char* to float or double
ここで与えられた解決策は、「stdlib.h」をインクルードすることで、そうした後、私は明示的に呼び出し「のstd :: atof」、まだ運にatofの呼び出しを変更しました。
すべての値が正確に表現できるわけではありません。また参照してください:http://stackoverflow.com/questions/588004/is-floating-point-math-broken – NathanOliver
浮動小数点!=実数。バイナリへようこそ。 @ NathanOliverのリンクを参照してください。 – davidbak
あなたの質問に対するちょっとした修正。あなたの結果は完全に正当で正しい。あなたの前提と期待は無効です。 – Ped7g