c++中保留小数点后两位,并不是输出打印

一直在找“把值直接更改成保留小数点后两位”的方法,在网上找了这么久,都是更改输出格式,我需要这玩意有屁用,我要的是更改真实数据!

首先明确一点,浮点数的所占空间是固定的,就算你只需要保留其前两位,小数点两位之后的数据信息仍然也是要储存的。
再者,浮点数也不能保证小数点前两位的能精确表达,这也就是例如 0.03 可能被表达为 0.0300001,这是浮点数格式的问题,没有改变的办法。
如果你确实有这样的需求,你可以自定义自己的数据结构,从原始的浮点数中提取并保留前两位数据,并以其他的精确形式保留相关数据。

如果确定每个小数只需要小数点后两位,可以试试用整数代替小数来存储。

比如:要记录小数1.23,可以直接存储为123,在使用或计算的时候,再/100即可

这里可以通过 stringstream 来实现这个功能:

#include <iostream>
#include <sstream>
#include <iomanip>

double fun(const double& data) {
    std::stringstream sdata;
    sdata << std::fixed << std::setprecision(2) << data;
    return std::stod(sdata.str());
}

int main() {
    double data = 2022.0716;
    std::cout << fun(data);
    return 0;
}

其实有一种最简单的方法,就是double转int,int再转double。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    double a;
    int b;
    cin>>a;
    b=floor(a*100+0.5);
    //12.222*100=1222.2  1222.2+0.5=1222.7  所以不进位
    //12.228*100=1222.8  1222.8+0.5=1223.3  所以进位
    //floor取整数部分
    a=b*0.01;//转回小数
    printf("%.5lf\n",a);//验证结果
    return 0;
}

输入及输出结果:

12.222
12.22000
12.228
12.23000

请问您问题解决了吗