Boost.Multiprecisionには、cpp_dec_floatからcpp_intへ変換する機構がないようなので、それらしい動作をするものを書きました。
ここでは、cpp_dec_floatの変数をfloor()関数で小数点以下を切り捨て、文字列に変換し、文字列を受け取るcpp_intのコンストラクタで変換を行っています。
#include <iostream> #include <boost/multiprecision/cpp_dec_float.hpp> #include <boost/multiprecision/cpp_int.hpp> int main() { namespace mp = boost::multiprecision; mp::cpp_dec_float_50 f = 3.14; mp::cpp_int n { mp::cpp_dec_float_50(mp::floor(f)).str() }; std::cout << n << std::endl; }
3
一度cpp_dec_floatに変換しなおしているのは、floor()の結果がcpp_dec_floatではなく式テンプレートになっているからです。
文字列への変換はそれなりにコストが大きいので、この方法を推奨するようなことはとくにしません。
丸め演算はほかに、ceil(切り上げ)、round(最近接偶数への丸め)があります。