在我的代码中,我想要一个函数,它可以基于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);
您将获得所需的字符串。