我在 C++ 中有一个 float ,这个数字可以有不同的形式,例如355.5 或 9.9(这是从测试代码输入的)。
我有一个函数是
float return_max(angle_set_t *angles)
{
float val;
float max;
max= angles->key;
while( angles != NULL )
{
val= angles->key;
if(max<=val)
{
max=val;
}
angles = angles->right;
}
return max;
}
max
可以是浮点值。我想将该值四舍五入到小数点后一位。
我需要一个适用于 355.555555 和 9.999999 的通用解决方案
float first_aset()
{
//do somethig
result=return_max();
return result;
}
void main()
{
if( first_aset(S, 357.0, 20.0 ) != 9.9 ||
first_aset(T, 357.0, 20.0 ) != 9.9 )
{
printf("Error in wrap-around interval (3)\n");
printf(" first in interval [357, 20) in S is %f, should be 9.9\n",
first_aset(S, 357.0, 20.0 ) );
printf(" first in interval [357, 20) in T is %f, should be 9.9\n",
first_aset(T, 357.0, 20.0 ) );
}
}
这里是问题..结果是:
Error in wrap-around interval (3)
first in interval [357, 20) in S is 9.900000, should be 9.9
first in interval [357, 20) in T is 9.900000, should be 9.9
最佳答案
做
answer = static_cast<float>(static_cast<int>(number * 10.)) / 10.;
如果您只是想以该精度显示值,请尝试 setprecision :
cout << setprecision(1) << number << endl;
在您的代码中,您将 float 与 double 进行比较。这只会以糟糕的方式结束(任何浮点比较都会如此)。如果与 9.9f
关于c++ - C++中的 float 四舍五入到小数点后一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952040/