C++と色々

主にC++やプログラムに関する記事を投稿します。

cpp_dec_floatをcpp_intに変換する方法

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さんに教えていただいた方法です。

#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