使用std :: to_string()将double转换为字符串时,有没有办法设置结果的精度?
答案 0 :(得分:34)
没有。
返回:每个函数返回一个字符串对象,其中包含值的字符表示形式 它的参数将通过使用格式说明符调用
sprintf(buf, fmt, val)
生成"%d"
,"%u"
,"%ld"
,"%lu"
,"%lld"
,"%llu"
,"%f"
,"%f"
或{ {1}},分别表示buf指定的地方 一个足够大小的内部字符缓冲区。
答案 1 :(得分:6)
我认为将std::stringstream
与setprecision
一起使用将是最灵活/最便携的选择,但如果你知道你的数据,作为解决方法,你可以尝试将to_string
结果子字符串。例如:
std::string seriesSum(int n)
{
double sum = 0, div = 1;
for(int i = 0; i < n; i++) {
sum += 1.0 / div;
div += 3;
}
return std::to_string(round(sum * 100)/100).substr(0,4);
}
在上面的代码中,我通过取字符串的前4位来打印两个小数位0.00
,但它只能起作用,因为我知道整数部分永远不会超过一位数。您还可以使用string.find()
搜索小数点分隔符并使用它的位置来计算子字符串的大小,使其更具动态性。
答案 2 :(得分:0)
我只是在寻找解决方案,因为我正在重载std::cout <<
运算符,因此执行std::stringstream
解决方法将很棘手。我通过使用std::substr()
函数定位小数点并选择了经过选择的位数来解决了我的问题。
std::string trimmedString = std::to_string(doubleVal).substr(0, std::to_string(doubleVal).find(".") + precisionVal + 1);
这将在您的电话号码后给您“ precisionVal” 0。
例如:
double doubleVal = 3;
int preisionVal = 2
3.000000
变为3.00