切り捨て、切り上げ、四捨五入、いずれの丸め演算の場合でも、その結果は小数点以下を持たない値になります。
そういう値を整数型に変換して扱いたい、というのがよくあるので、丸め演算と整数型へのキャストを同時に行う関数を書きました。
#include <boost/detail/lightweight_test.hpp> #include <shand/round.hpp> int main() { { const int x = shand::round_to<int>(1.4); BOOST_TEST(x == 1); const int y = shand::round_to<int>(1.5); BOOST_TEST(y == 2); } { const int x = shand::round_even_to<int>(1.5); BOOST_TEST(x == 2); const int y = shand::round_even_to<int>(2.5); BOOST_TEST(y == 2); BOOST_TEST(shand::round_even_to<int>(-1.5) == -2); BOOST_TEST(shand::round_even_to<int>(-1.7) == -2); } { const int x = shand::ceil_to<int>(1.4); BOOST_TEST(x == 2); } { const int x = shand::floor_to<int>(1.6); BOOST_TEST(x == 1); } return boost::report_errors(); }
round_to()
は四捨五入、ceil_to()
は切り上げ、floor_to()
が切り下げです。テンプレート引数で、変換先の整数型を指定します。これらは、標準ライブラリにある丸め関数のラッパーです。
std::round()
/round_to()
が四捨五入なので、最近接偶数への丸めを行うround_even_to()
関数も用意してあります。
宣伝: 『プログラミングの魔導書 Vol.3』 予約受付中です。 http://longgate.co.jp/books/grimoire-vol3.html |