web-dev-qa-db-ja.com

float値を小数点以下2桁に丸めるにはどうすればよいですか?

次のような加速度計からフロート値を取得しました。

-3.04299553323

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

編集:

Objective-Cの丸め数値

12
Thanks

私はこれが古い投稿であることを知っていますが、誰かが簡単な2ステップのオプションを探している場合に備えて。

float old = -3.04299553323;  
float new = [[NSString stringWithFormat:@"%.2f",old]floatValue];

結果= -3.04

@ "%。2f"は小数点以下第2位に四捨五入されます。小数点以下3桁が必要な場合は、@ "%。3f"などを入力します。

お役に立てれば!

39
FlippinFun

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

_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
_

おっと!

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進浮動小数点パッケージの1つを使用します Wikipediaの10進浮動小数点ページ

32
alastair

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

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

1
Chris

この質問への回答を投稿するだけです。iPadアプリでユーザーに丸められたfloat値を表示するために、指定された2つの回答をマージしたため、これをすばやく機能させる唯一の方法でした。

NSString *roundedAmount = [NSString stringWithFormat:@"%.2f", round ((floatValue / 1024) * 100.0) / 100.0];
1
Torsten Barthel