将boost::multiprecision::cpp_dec_foat_100精确转换为字符串



在我的代码中,我想要一个函数,它可以基于boost::multiprecision::cpp_dec_foat_100执行一些计算,并以一定的精度返回字符串作为结果,但问题是我应该如何设置精度?例如,如果精度是9,那么我预计以下数字会得到以下结果:

对于2345.12345678910111213,我期望字符串"2345.123456789",但我有12345.1235

对于1.12345678910111213,我期望字符串"1.123456789",但我有1.12345679

所以它总是用round返回我提供给str((函数的确切字符数。我知道我可以这样做,例如:

std::stringstream ss;
ss << std::fixed << std::setprecision(9) << my_value;
return ss.str();

或者使用cout(但这不是我的情况(或在字符串上进行一些查找来查找"后面只需要9个字符,但我能用一种更简单的方式吗?也许在boost中有某种功能可以正确地执行它?

#include <iostream>
#include <boost/multiprecision/cpp_dec_float.hpp>
namespace bmp = boost::multiprecision;
std::string foo_1()
{
bmp::cpp_dec_float_100 val{"12345.12345678910111213"};
return val.str(9);
}
std::string foo_2()
{
bmp::cpp_dec_float_100 val{"1.12345678910111213"};
return val.str(9);
}
int main() 
{
auto const val_1 = foo_1();
auto const val_2 = foo_2();

std::cout << "val_1: " << val_1 << std::endl;
std::cout << "val_2: " << val_2 << std::endl;
return 0;
}

联机版本:https://wandbox.org/permlink/HTAHsE5ZE3tgK9kf

更改行:

return val.str(9);

收件人:

return val.str(9, std::ios::fixed);

您将获得所需的字符串。

最新更新