四舍五入(c++實現)


 

思路:如果直接對一個浮點數取四舍五入,不保留小數部分,那么我們的思路是:正數加上0.5,負數減去0.5,代碼如下:

  

1 #include <iostream>
2 
3 using namespace std; 4 
5 int round1(double number) 6 { 7     return (number>0.0)?(number+0.5):(number-0.5); 8 }

或者

1 #include <iostream>
2 #include <cmath>
3 
4 using namespace std; 5 
6 int round2(double number) 7 { 8     return (number>0.0)?floor(number+0.5):ceil(number-0.5); 9 }

如果要對浮點數按位四舍五入,就要換種方式。比如要對1.12345保留4位小數,先乘以10000(10^4,幾位小數就是幾次方),然后加0.5,得11235,再除以10000,得到1.1235。代碼如下:

 1 //按位四舍五入
 2 #include <iostream>
 3 #include <stdio.h>
 4 using namespace std;  5 
 6 double round3(double number,int bits) //number->浮點數,bits->保留位數
 7 {  8     for(int i=0;i<bits;++i)  9  { 10         number*=10; 11  } 12     number=(long long)(number+0.5); 13     for(int i=0;i<bits;++i) 14  { 15         number/=10; 16  } 17     return number; 18 } 19 
20 int main() 21 { 22     double x; 23         int n; 24     cin>>x>>n; 25     printf("%.15f",round3(x,n)); 26 }

但這樣做也有個bug,就是double的精度只在小數點后15-16位之間(正數15位,負數16位),所以最多也只能精確到這樣子,n更大就失效了。如果有更高精度的需求,想到再更。


免責聲明!

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



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