一直在找“把值直接更改成保留小数点后两位”的方法,在网上找了这么久,都是更改输出格式,我需要这玩意有屁用,我要的是更改真实数据!
首先明确一点,浮点数的所占空间是固定的,就算你只需要保留其前两位,小数点两位之后的数据信息仍然也是要储存的。
再者,浮点数也不能保证小数点前两位的能精确表达,这也就是例如 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
请问您问题解决了吗