boost::multiprecision::cpp_dec_float(以下cpp_dec_float)からboost::multiprecision::cpp_int(以下cpp_int)へ直接変換する方法はありません。同様にcpp_intからcpp_dec_floatへ直接変換する方法はありません。*1
cpp_intもcpp_dec_floatも、文字列へ変換するstr()
メンバ関数を持っており、かつ、文字列を受け取るコンストラクタがあります。よって一度文字列を介すことで変換することができます。
twitterで@cpp_akiraさんに教えていただいた方法です。
@nekko1119 いちおう、これでいけました。 https://t.co/Vsmmm4ZqX3 floorの戻り値を一度cpp_dec_float_50に変換してるのは、戻り値がexpression templateになってるからです。
— Akira Takahashi (@cpp_akira) 2013, 9月 18
#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 続行するには何かキーを押してください . . .
*1:もしあれば、恥ずかしいので教えて下さいorz