我需要从boost::multiprecision::int128_t
转换为double
。
对于较小的int,我使用:
template<typename flt_t>
flt_t as_flt() const { return std::ldexp (static_cast<flt_t>(val), -frac_bits); }
带val=int128_t, flt_t = double
但static_cast<double>(int128_t)
似乎失败
错误:来自类型的static_cast无效。。。。
尝试convert_to方法。
boost::multiprecision::int128_t some128Int = 141324;
double someDoubleNumber = some128Int.convert_to<double>();
根据John Maddock(在boost用户列表上回答)
C++03的方式是:
cpp_int i = 1;
i <<= 128;
double d = i.convert_to<double>();
在C++11中,您可以只使用static_cast(显式转换运算符)。