4

double を返す API 呼び出しがあります。double の 10 進数の長さは、多数の小数点以下桁数から数桁まで変化する可能性があります (すべてアクチュエータの状態に依存します)。この double は、アクチュエータの範囲半径上の現在の位置を表します。システムに多くのノイズが追加されるため、このような詳細な数値には興味がありません。スペースを節約するためにフロートを使用してきましたが、それでも小数点以下の長さが 6 ~ 8 のフロートがあります。私が望む仕事をしないという理由だけで、床や天井には興味がありません。たとえば、私は数字を持っています:

-2.05176
-0.104545
 0.30643
 0.140237
 1.41205
-0.176715
 0.559462
 0.364928

何があっても精度を小数点以下2桁に設定したい。std::cout の出力精度について話しているわけではありません。これを設定する方法は知っています。フロートの実際の精度について話しています。つまり、0.XX フォーマットと 0.XX00000000000 の実際の精度を持つ float に興味があります。したがって、上記のリストを次のように変換します。

-2.05
-0.10
 0.30
 0.14
 1.41
-0.17
 0.55
 0.36

ブーストには数値変換テンプレートがあることは知っていますが、精度の低い浮動小数点数から浮動小数点数に変換する方法がわかりません。誰か助けてくれませんか?

4

2 に答える 2

6

丸めていただけませんか。

float round(float num, int precision)
{
    return floorf(num * pow(10.0f,precision) + .5f)/pow(10.0f,precision);
}
于 2011-07-11T23:35:16.820 に答える
2

float と double の精度は、ハードウェアに依存します。それ以外は、ソフトウェアでコーディングする必要があります。

代わりに、整数で作業してスケーリングを試すことができます。

-205
 -10
  30
  14
 141
 -17
  55
  36
于 2011-07-11T23:32:10.447 に答える