制限

2009-04-28 15 views
11

私はCに新たなんだ++。私はdigits.So a0.12なり、小数点2から変数a を制限したいダブル変数double a=0.1239857を持っています。 C++には、ceilやfloorのようなaより大きいか小さい整数を返す関数があります。浮動小数点変数の桁制限を実装する関数はありますか?または、aの精度をどのように変更できますか?制限

お問い合わせ

+0

のstd ::固定を使用して必要な形式 http://stackoverflow.com/questions/5907031/printing-theにつながるこの答えに示すように、 -correct-with-cout-of-cout –

答えて

3

あなたは変数を制限したいとお考えですか?値またはその書式。この値にはfloor + divisionを使用できます。次のようなものがあります。

double a = 0.12123 
double b; 

b = floor(a * 100)/100 
6

これは、小数点以下2桁になります。

a = floor(a * 100.0)/100.0; 
+0

OPから尋ねられませんでしたが、 'a'を印刷すると2桁しか表示されないことに注意してください。丸め誤差が発生します。 – AbdealiJK

18

実際に数値を丸めるか、表示精度を変更しますか?

前者

(余分な桁を切り捨て):後者の場合

double scale = 0.01; // i.e. round to nearest one-hundreth 
value = (int)(value/scale) * scale; 

または(jherikoの答えにつき、必要に応じて/ダウン切り上げ)

double scale = 0.01; // i.e. round to nearest one-hundreth 
value = floor(value/scale + 0.5) * scale; 

cout << setprecision(2) << value; 

setprecision()へのパラメータは、小数点の後に表示される最大桁数です。

+0

あなたが表示するようなストリームでsetprecisionを使うと、それも丸くなることに注意してください。 –

+0

ブライアン - 詳細を教えてください。確かに、適切な数の位に切り上げまたは切り下げられますが、変数に実際に格納されている値は変更されません。 – Alnitak

+0

coutに表示すると、値は適切な精度に丸められます。もちろん、変数の値には影響しません。 –

1

あなただけの出力に値をしたい場合、あなたは値そのものを変換したい場合は、あなたが行うことができます

printf("%.3f", a); // Output value with 3 digits after comma 

ような何かを行うことができます。

a = (int)(a * 1000)/1000.0f; 

注両方が無行うこと四捨五入すると、値が切り捨てられます。

1

ストリームの精度を設定することができます。

double d = 3.14579; 
cout.precision(2); 
cout << d << endl; 

// Or use a manipulator 

#include <iomanip> 
cout << setprecision(2) << d << endl; 

(注)このような流れにdoubleまたはfloatを送信するとき、それは(あなたがこれを認識していない場合は、時にはあなたをつまずかせることができます)あなたのためのラウンドに自動的になること。

1

丸められる値が変数 "x"であると仮定すると、実際の丸め解法はx = floor(100*x + 0.5)/100;となります。

ここで他の人が推奨するx = floor(100*x)/100;は実際には2dpに切り捨てられます。

+0

私はlinefloor(100 * x + 0.5)/ 100を理解できませんでした。 – Kapil

1

あなたはまた、このような何かを行うことができます:

//This code will ask the user for an input, set the decimal precision to the hundredths place, and add 4.63 to the inputted variable 

int banana; 
cin >> banana; 
cout << setprecision(2) << fixed << banana + 4.63;