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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM