2010-07-18 47 views

回答

3
int nearest = 5; 
int result = (input+nearest/2)/nearest*nearest; 
1

實際上您根本不需要Boost,只需包含在C++庫中的C庫即可。具體來說,您需要包括CMATH頭:

圓了一個數字:小區():http://www.cplusplus.com/reference/clibrary/cmath/ceil/

回合下來了一些:地板():http://www.cplusplus.com/reference/clibrary/cmath/floor/

你可以寫你自己的回合函數,那麼:

#include <cmath> 
#include <cstdio> 
#include <cstdlib> 
#include <iostream> 
#include <string> 
#include <utility> 

double roundFloat(double x) 
{ 
    double base = floor(x); 

    if (x > (base + 0.5)) 
      return ceil(x); 
    else return base; 
} 

int main() 
{ 
    std::string strInput; 
    double input; 

    printf("Type a number: "); 
    std::getline(std::cin, strInput); 
    input = std::atof(strInput.c_str()); 

    printf("\nRounded value is: %7.2f\n", roundFloat(input)); 

    return EXIT_SUCCESS; 
} 
4

您可以使用C99 lround可用。

#include <cmath> 
#include <iostream> 

int main() { 
    cout << lround(1.4) << "\n"; 
    cout << lround(1.5) << "\n"; 
    cout << lround(1.6) << "\n"; 
} 

(輸出1,2,2)。

檢查您的編譯器文檔是否需要啓用C99支持和/或如何啓用C99支持。

3

Boost Rounding Functions

例如:

#include <boost/math/special_functions/round.hpp> 
#include <iostream> 
#include <ostream> 
using namespace std; 

int main() 
{ 
    using boost::math::lround; 
    cout << lround(0.0) << endl; 
    cout << lround(0.4) << endl; 
    cout << lround(0.5) << endl; 
    cout << lround(0.6) << endl; 
    cout << lround(-0.4) << endl; 
    cout << lround(-0.5) << endl; 
    cout << lround(-0.6) << endl; 
} 

輸出是:

0 
0 
1 
1 
0 
-1 
-1