したがって、「45.05」などの数値を含むCStringがあり、この数値を小数点以下1桁に丸めたいと思います。
私はこの機能を使用します
_stscanf(strValue, _T("%f"), &m_Value);
値を丸めることができるフロートに入れます。ただし、45.05の場合、取得する数値は45.04999です...これは45.0に丸められ、45.1が期待されます。
CStringから正しい値を取得するにはどうすればよいですか?
TIA
文字列の結果が必要な場合、最善の策は、小数点を見つけて、その後の 2 桁を検査し、それらを使用して丸められた結果を作成することです。結果として浮動小数点数が必要な場合は、45.1 を正確に表すことができないため、それは絶望的です。
編集: 算術で丸めに最も近いのは 計算floor(x*10+0.5)/10
ですが、45.05 でこれを行っても 45.1 にはならないことを知っておいてください。
100 分の 1 以下の位置を構成する数字を個別に抽出し、それらを数値に変換して個別に丸め、それを数値の残りの部分に追加できます。
"45.05" = 45.0 と 0.5 の 10 分の 1 (0.5 は 2 進数で正確に表すことができます)
0.5 を 1 に丸める
45.0 + 10分の1 = 45.1
これを、分数の位置を個別に処理することと混同しないでください。「45.15」は 45 と 0.15 に分割されるのではなく、45.1 と 0.5 の 10 分の 1 に分割されます。
しばらく C++ を使用していませんが、次の手順を実行します。