将C++中的浮点数舍入到一位小数
我在C++中有一个浮点数,并且数字可以采用不同的形式,例如, 355.5或9.9(这是从测试代码输入的)。将C++中的浮点数舍入到一位小数
我有一个函数,它是
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));
}
}
在这里是problem..the结果是:在环绕间隔(3)
错误
S中的区间[357,20)中的第一个是9.900000,应该是9.9
在T中的区间[357,20)中的第一个是9 0.900000,应该是9.9
做
answer = static_cast<float>(static_cast<int>(number * 10.))/10.;
反之,如果你只是想显示与精度值,尝试setprecision:
cout << setprecision(1) << number << endl;
在你的代码是比较float和double。这只能严重结束(与任何浮点比较一样)。它如果你比较9.9f
对于任何数字 AlcubierreDrive 2010-10-17 04:31:37
但我需要它的浮动不双打。 – abbas 2010-10-17 04:33:03
@abbas A double是一个具有更多存储容量的浮点数。 – AlcubierreDrive 2010-10-17 04:33:36
作为一个侧面说明,你似乎是建立自己的(侵入)链表。 C++已经为您提供了各种容器,如vector
和list
。此外,您不必编写一个函数来确定序列中的最大值,只需使用标准库中的适当算法即可。
#include <vector>
#include <algorithm>
std::vector<float> angles = {0.0, 355.5, 9.9};
float maximum = *std::maximum_element(angles.begin(), angles.end());
您是否需要四舍五入来显示给用户的值,或者您是否需要执行进一步的计算,以便将值舍入?你有一个特定的四舍五入策略吗? (有多种方法可以舍入一个数字。) – 2010-10-17 04:30:14
furhter的计算 – abbas 2010-10-17 04:32:23
为什么你认为舍入在这里是个好主意?在这种情况下,“十进制数字”的意义是什么?为什么不仅以更高的精度生活并为此感到高兴呢? – fredoverflow 2010-10-17 13:52:13