13

次のような加速度計から浮動小数点値を取得しました。

-3.04299553323

たとえば、-3.04 を取得したいと思います。その float 値を丸める簡単な方法はありますか?

編集:

Objective-C での数値の丸め

4

4 に答える 4

32

これは、エンド ユーザーに表示するために数値をフォーマットするときにのみ行う必要があります。

float rounded = roundf(orig * 100) / 100.0;

または同様のものは正確な答えを返します。

確かに、一般的にはそうではありません。たとえば、

float f = 123456.3;
float r = roundf(f * 100) / 100.0;

printf("%.2f, %.10f\n", r, r);

出力する

123456.30, 123456.2968750000

おっとっと!

notを使用doubleするとfloat役立ちますが、それでも、コードを少し変更すると、実際には問題が解決しないことがわかります。

double f = 123456.3;
double r = round(f * 100) / 100.0;

printf("%.2f, %.20f\n", r, r);

繰り返しますが、

123456.30, 123456.30000000000291038305

これは、正確に丸められていないことを明確に示しています。

とにかく、おおよそround(f * 100) / 100.0のラウンドだけを行うというのが物語の教訓です。場合によってはこれで十分な場合もありますが、結果が実際には丸められていないことに注意する必要があります。

より良いものが必要な場合は、代わりに 10 進演算を使用する必要があります。これを行うには、値を整数として保持するか (たとえば、通貨の値の場合、ポンドまたはドルではなくペンスまたはセントで保持します)、またはウィキペディアの 10 進浮動小数点ページで見つけることができるさまざまな 10 進浮動小数点パッケージのいずれかを使用します。 .

于 2011-07-13T16:00:37.463 に答える
1

100を掛けて(必要に応じて最も近い整数に切り上げ/切り下げ)、整数部分を取り、もう一度100で割ります

小数点以下の桁数に適用され、10 ^(小数点以下の数)で乗算/除算されます。

于 2009-05-06T10:59:54.337 に答える