2011-10-23 8 views
2

可能性の重複:
round() for float in C++場所に二重の数まで丸め

[OK]を、私は数8.47434を持っていたとします。私はそれを8.5小数点以下1桁に丸めたい。どのように私はC++でこれを行うことになるでしょうか

+0

すばやく汚れた解決方法については、[この回答](http://stackoverflow.com/questions/485525/round-for-float-in-c/2249412#2249412)を特にお読みください。 – Jon

答えて

3

を乗算して10を乗算し、10で再度除算します。

例:

round(10 * 8.47434f)/10; 

編集:

OK、私はちょうどround()は常にmath.hに存在していないことが判明。

上記はgccとicl(Microsoftのライブラリを使用)では動作しますが、tccでは動作しません。

は、標準ライブラリの一部です。したがって、丸めるために、0.5を追加してfloor()を使用することができます。

例:

floor(10 * 8.47434f + 0.5f)/10; 
+3

にはいくつかのニュアンスがありませんIMO – sehe

+0

実際には確かに**正確には10を掛けて精度を失いますが、エッジの場合は間違った方向に丸くなります – David

0

あなたは10によって複数が10でint型と除算に0.5キャストを追加することができます。

数値が負の場合は0.5を減算し、負の数値の場合は10を掛けて除算します。

2

std::floor(d)+std::floor((d-std::floor(d))*10.0+0.5)/10.0

はいえあらかじめご了承(dを経由してあなたの番号になります)10によって、元のダブルを掛ける他の回答とは対照的に、この方法は、精度を失うことはありませんそれをやって浮動小数点数はのいずれかを表すことはできません。ダブルスの場合:1.351.3999999999999999になります。 123.34は、最初にの代わりに123.3に切り捨てるように123.34999999999999と表されます。