1. 程式人生 > >C語言四捨五入的實現方法。

C語言四捨五入的實現方法。

今天在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相同。

關於負數的四捨五入,一般用的是數軸法,來個通俗的解釋:

四捨五入,按照就近原則就可以,用數軸方法,將數字標在數軸上面,靠近哪點就是四捨五入的答案