我是C ++的新手,我有双变量double a=0.1239857我想限制变量a
从小数点后两位数字开始,因此a将是0.12。 我知道C ++具有返回大于或小于a的最大或最小整数的函数,例如ceil或floor。是否有实现浮点变量位数限制的函数? 或如何更改a变量的精度?
最好的祝福...
使用此答案中所示的std :: fixed将导致所需格式stackoverflow.com/questions/5907031/
您实际上是在尝试四舍五入该数字,还是只是更改其显示的精度?
对于前者(截断多余的数字):
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()的参数是小数点后显示的最大位数。
请注意,当您对显示的流使用setprecision时,它也会舍入。
布莱恩-请详细说明。 当然,它会显示将值四舍五入到适当数量的位数,但不会更改实际存储在变量中的值。
该值将在显示到cout时四舍五入到适当的精度。 当然,它对变量中的值没有影响。
我试图说这两者都可以:setprecision将值显示为所需的精度,并在进行此操作时四舍五入。
您还需要使用"固定"。 cout << fixed << setprecision(2) << value;
这将导致小数点后两位数字。
a = floor(a * 100.0) / 100.0;
尽管OP并没有要求:请注意,在打印a时,不能保证仅显示2位数字。 它将有舍入错误。
您想限制变量是什么意思?值或其格式。对于值,可以使用下限+除法。就像是:
double a = 0.12123
double b;
b = floor(a * 100) / 100
您还可以执行以下操作:
//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;
假设要舍入的值在变量" x"中,则实际舍入解为x = floor(100*x + 0.5) / 100;。
其他人在这里推荐的x = floor(100*x) / 100;实际上会将数字截断为2dp。
我不明白linefloor(100 * x + 0.5)/ 100
您可以设置流的精度,例如
double d = 3.14579;
cout.precision(2);
cout << d << endl;
// Or use a manipulator
#include
cout << setprecision(2) << d << endl;
请注意,当您向此类视频流发送double或float时,它将自动为您舍入(如果您不了解此信息,有时可能会使您绊倒)。
使用ios_base::precision格式化I / O。
如果您只想输出值,则可以执行以下操作
printf("%.3f", a); // Output value with 3 digits after comma
如果要转换值本身,可以执行以下操作:
a = (int)(a * 1000) / 1000.0f;
请注意,两者都不进行舍入,它们只是截断值。