四捨五入的問題

我們很常利用的Rounding函數會是這樣的

inline int Round(double val)
{
  return (int)(val+0.5);
}

不過四捨五入在負數上的運作會有點不同,下面的程式就是展示這個不同點,


和我們慣用的寫法在負數會有些不同,

和將負數位移成正數之後,再位移回負數的寫法,

以及+0.5之後取floor的寫法是相同的結果。

#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{
  cout << "Rounding in negtive value:" << endl;
  cout << (int)(-0.4 + 0.5) << endl; 
  cout << (int)(-0.5 + 0.5) << endl;
  cout << (int)(-1.4 + 0.5) << endl;
  cout << (int)(-1.5 + 0.5) << endl;

  cout << "Rounding in negtive value(shift&shift back):" << endl;
  cout << (int)(-0.4 + 128 + 0.5) -128 << endl; 
  cout << (int)(-0.5 + 128 + 0.5) -128 << endl;
  cout << (int)(-1.4 + 128 + 0.5) -128 << endl;
  cout << (int)(-1.5 + 128 + 0.5) -128 << endl;
  
  cout << "Rounding in negtive value(+0.5&floor):" << endl;
  cout << floor(-0.4 + 0.5) << endl; 
  cout << floor(-0.5 + 0.5) << endl;
  cout << floor(-1.4 + 0.5) << endl;
  cout << floor(-1.5 + 0.5) << endl;

  system("pause");
  return 0;
}


留言