C語言四捨五入的實現方法。
阿新 • • 發佈:2019-01-28
今天在oj上看到了一道看起來很簡單的題目,結果四捨五入竟然找不到很好的演算法實現,百度了一下發現...這麼簡單!!!所以還是要繼續努力啊,加油!
以下是oj上的題目Description
在我們的日常學習、生活、工作中要分得清主次,既能抓問題的主要矛盾,也能注意到次要矛盾。例如兩個整數相除,結果的整數部分是它的重心之所在,但是小數部分也不能忽視。現給出2個整數a,b,求a/b的整數部分和小數部分。
Input
第一行包含一個整數n表示測試用例的個數(0<n<1000)。
輸入2個整數a,b( 0<=a<=100000,0<b<=10000000)。
Output
先輸出從1開始的序號,在輸出a/b的整數部分和小數部分,小數部分保留5位小數,並且對第6位小數進行四捨五入。每個輸出各佔一行,各項之間用空格分隔。
Sample Input
3
2 3
3 2
4 2
Sample Output
1 0 0.66667
2 1 0.50000
3 2 0.00000
HINT
注意:請勿利用printf()函式自帶的四捨五入功能,必須用自己的程式碼實現四捨五入!
四捨五入的實現:
(1)
float a = 3.456; //保留到小數點後兩位
float b =(int)((a * 100) + 0.5) / 100.0;
(2)
float f = .....;
int i = (int)(f + 0.5);
i就是f四捨五入的結果。(3)
貌似上面的對負數處理有點問題
網上還有一段處理負數四捨五入的程式碼:
int myround(double indata,int precision,double *outdata) { long pre=1,i; for (i=0;i<precision;i++) pre=pre*10; if ( cy_FloatCompare(indata,0.00)>0 ) *outdata=(int)((indata*pre)+0.5)/100.00; else *outdata=(int)((indata*pre)-0.5)/100.00; return 0; } //cy_FloatCompare是浮點數與0比較的函式,假設它存在。返回值與strcmp相同。
關於負數的四捨五入,一般用的是數軸法,來個通俗的解釋:
四捨五入,按照就近原則就可以,用數軸方法,將數字標在數軸上面,靠近哪點就是四捨五入的答案