c++ 如何实现保留小数并 且 不进行四舍五入
以保留2位小数为例,代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a;
cin>>a;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<a<<endl;//fixed为实数输出,若改为scientifitic则是科学技术法输出;setprecision(2)此处表示设置精度为2
return 0;
}
#include "iostream"
#include "math.h"
using namespace std ;
int main()
{
float a,b,c,s,p;
scanf("%f%f%f",&a,&b,&c);
if(((a+b)>c)&&((a+c)>b&&((b+c)>a)))
{
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("面积%2f\n",((int)(s*100+0.5))/100.0f);
}
else
{printf("这个不是三角形");
}
return 0 ;
}
- 追问:
- C语言不是很懂,可以用C++吗,主要的是四舍五入不懂,请指教
- 回答:
- 额,c++是完全兼容c语言的,你把它当做c++源代码编译也是可以的 四舍五入的主要思想就是利用c++语言特性,当浮点型向整形转换的时候会产生“截断”现象",那么,你此时可以将进行摄入,舍入的位 通过乘以或者除以十的n 次方的方法挪移到小数点后面的第一位,然后将它加0.5 进行舍入,完成后再截断然后 除以或者乘以 十的n 次方进行还原 例如 12.345 进行保留两位小数的舍入 则,先乘以100 得到 1234.5 之后把它加0.5得到 1235.0 ,截断(使用强制类型转换)得到1235 最后除以100 得到 12.35
发现了C++的格式化输出可以四舍五入地保留小数
首先我们设置cout.setf(ios::fixed);
setf是setflag的缩写,MSDN解释为Sets the specificed flags。呵呵,估计是和C++的封装有关吧。
然后我们设置cout.prevision(2);这个是保留两位小数,四舍五入
我们可以用以下这个程序进行测试
#include<iostream>
using namespace std;
int main()
{
float a=3.1456;
cout.setf(ios::fixed);
cout.precision(2);
cout<<a<<endl;
return 0;
}
#include <iostream>#include <iomanip>#include <math.h>using namespace std;int main(){ float a; while(cin>>a) { a=floor(a*100.0)/100.0; cout.precision(2); //输出小数点后两位 cout<<setiosflags(ios::fixed)<<setw(2)<<a<<endl; } return 0;}
#include<iostream>#include<iomanip>#include <math.h>using namespace std;int main(){ double f,c; cout<<"请输入一个小数:"; cin>>f; f=floor(f*100.0)/100.0; cout<<setiosflags(ios::fixed); cout.precision(2); //输出小数点后两位 cout<<"不四舍五入,保留2为小数:"<<f<<endl;}
浙公网安备 33010602011771号