c++ - C++中的 float 四舍五入到小数点后一位

标签 c++ floating-point

我在 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/

相关文章:

c++ - 没有从 "const char"到 "int"的转换

c++ - GLEW 初始化失败

c++ - 数组指针的影响

c++ - 大端和小端 float 有什么区别?

以引用圆方式将弧度转换为度数

c++ - 为函数定义 typedef,该函数返回指向与其自身类似的函数的函数指针

c++ - 是否可以将某些数据锁定在 CPU 缓存中?

go - 使用 time.Unix() 从 float 解析带小数的 unix 时间戳?

java - 在 Java 中舍入一个 double

javascript - Cloud Endpoints 拒绝来自 javascript 前端的浮点值