2

したがって、「45.05」などの数値を含むCStringがあり、この数値を小数点以下1桁に丸めたいと思います。

私はこの機能を使用します

_stscanf(strValue, _T("%f"), &m_Value);

値を丸めることができるフロートに入れます。ただし、45.05の場合、取得する数値は45.04999です...これは45.0に丸められ、45.1が期待されます。

CStringから正しい値を取得するにはどうすればよいですか?

TIA

4

3 に答える 3

2

文字列の結果が必要な場合、最善の策は、小数点を見つけて、その後の 2 桁を検査し、それらを使用して丸められた結果を作成することです。結果として浮動小数点数が必要な場合は、45.1 を正確に表すことができないため、それは絶望的です。

編集: 算術で丸めに最も近いのは 計算floor(x*10+0.5)/10ですが、45.05 でこれを行っても 45.1 にはならないことを知っておいてください。

于 2012-03-20T16:40:08.503 に答える
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 に分割されます。

于 2012-03-20T17:14:29.747 に答える
0

しばらく C++ を使用していませんが、次の手順を実行します。

  1. Decimal の後の文字を数える
  2. 小数点を削除
  3. 文字列を Int にキャストする
  4. 丸め演算を実行する
  5. (文字数から1を引いた数)×10で割る
  6. 結果を float に格納する
于 2012-03-20T17:14:12.553 に答える