std :: to_string的精度(double)

时间:2013-01-25 10:53:12

标签: c++ c++11

使用std :: to_string()将double转换为字符串时,有没有办法设置结果的精度?

3 个答案:

答案 0 :(得分:34)

没有。

返回:每个函数返回一个字符串对象,其中包含值的字符表示形式 它的参数将通过使用格式说明符调用sprintf(buf, fmt, val)生成 "%d""%u""%ld""%lu""%lld""%llu""%f""%f"或{ {1}},分别表示buf指定的地方 一个足够大小的内部字符缓冲区。

答案 1 :(得分:6)

我认为将std::stringstreamsetprecision一起使用将是最灵活/最便携的选择,但如果你知道你的数据,作为解决方法,你可以尝试将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