将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

+0

您是否需要四舍五入来显示给用户的值,或者您是否需要执行进一步的计算,以便将值舍入?你有一个特定的四舍五入策略吗? (有多种方法可以舍入一个数字。) – 2010-10-17 04:30:14

+0

furhter的计算 – abbas 2010-10-17 04:32:23

+0

为什么你认为舍入在这里是个好主意?在这种情况下,“十进制数字”的意义是什么?为什么不仅以更高的精度生活并为此感到高兴呢? – fredoverflow 2010-10-17 13:52:13

answer = static_cast<float>(static_cast<int>(number * 10.))/10.; 

反之,如果你只是想显示与精度值,尝试setprecision

cout << setprecision(1) << number << endl; 

在你的代码是比较float和double。这只能严重结束(与任何浮点比较一样)。它如果你比较9.9f

+0

对于任何数字 AlcubierreDrive 2010-10-17 04:31:37

+0

但我需要它的浮动不双打。 – abbas 2010-10-17 04:33:03

+0

@abbas A double是一个具有更多存储容量的浮点数。 – AlcubierreDrive 2010-10-17 04:33:36

rounded = truncf(original * 10)/10; 

但是可能(很少)的工作,我和Ben同意,你绝对不应该被检查确切的不平等。如果需要比较,请使用epsilon

+0

也将它除以10。那将会截断而不是圆整......取决于他是否想要这样做。 – JoshD 2010-10-17 04:33:17

+0

它会被所有数字355.55555以及9.9999999 – abbas 2010-10-17 04:35:01

+0

@Josh除以十,从他想要截断的例子中可以清楚地看出。 – 2010-10-17 04:36:22

作为一个侧面说明,你似乎是建立自己的(侵入)链表。 C++已经为您提供了各种容器,如vectorlist。此外,您不必编写一个函数来确定序列中的最大值,只需使用标准库中的适当算法即可。

#include <vector> 
#include <algorithm> 

std::vector<float> angles = {0.0, 355.5, 9.9}; 
float maximum = *std::maximum_element(angles.begin(), angles.end());