例题
学C语言了,可以编程解决很多问题,但没有一个C语言中的函数能完成四舍五入。
请编程解决这个问题。如输入2.055 0.154 10.159 99.999,则输出2.06 0.15 10.16 100.00。
输入格式
输入有若干行,每行一个浮点数x,都是三位小数
输出格式
输出四舍五入后的两位小数x。
输入样例
2.055
0.154
10.159
99.999
3.565
输出样例
2.06
0.15
10.16
100.00
3.57
当我用c++写好代码后……那个离谱的问题又出现了
代码:
#include <iostream>
#include <iomanip>
#include<cstdio>
#include<cmath>
using namespace std;
typedef unsigned long long ull;
const ull MOD=0x3f3f3f3f3f;
const double PI=3.1415926;
long long time_plus(int a,int b)
{
long long ans=1;
while(b)
{
if(b&1)
{
ans*=a;
}
a*=a;
b>>1;
}
return ans;
}
int main()
{
double x,y;
while(cin>>x)
{
cout<<fixed<<setprecision(2)<<x<<endl;
}
return 0;
}
找到了这老哥的博客
这是怎么发现的,老哥真稳!
我们加上1.0/10^(精度+1)就能弥补这点丢失的精度!!!!!
OHHHHHHHHHHHHHHHH!!!它一样了
#include <iostream>
#include <iomanip>
#include<cstdio>
#include<cmath>
using namespace std;
typedef unsigned long long ull;
const ull MOD=0x3f3f3f3f3f;
const double PI=3.1415926;
long long time_plus(int a,int b)
{
long long ans=1;
while(b)
{
if(b&1)
{
ans*=a;
}
a*=a;
b>>1;
}
return ans;
}
int main()
{
double x,y;
while(cin>>x)
{
cout<<fixed<<setprecision(2)<<x+0.001<<endl;
}
return 0;
}
这里有点闹鬼,+1.001只AC了%50 按道理来说0.001应该没问题
我们将精度调至0.0001就对了,很奇怪,理论上0.001就够了,先放这里吧