std :: to_string的精度(double)

42 c++ c++11

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

For*_*veR 36

没有.

返回:每个函数返回字符串对象保持,将通过调用来产生其自变量的值的字符表示sprintf(buf, fmt, val)与的格式说明 "%d","%u","%ld","%lu","%lld","%llu","%f","%f",或"%Lf",分别,其中的buf表示的足够的内部字符缓冲区尺寸.


小智 7

我相信使用std::stringstreamwith 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);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我0.00通过取字符串的前4位来打印两位小数,但它只能起作用,因为我知道整数部分永远不会超过一位数.您还可以使用string.find()搜索小数分隔符并使用它的位置来计算子字符串的大小,使其更具动态性.


小智 6

我只是在寻找解决方案,因为我正在重载std::cout <<操作符,因此要解决这个问题会很棘手std::stringstream。我通过使用该std::substr()函数来定位小数点并在小数点后面选取选定数量的数字来解决我的问题。

std::string trimmedString = std::to_string(doubleVal).substr(0, std::to_string(doubleVal).find(".") + precisionVal + 1);
Run Code Online (Sandbox Code Playgroud)

这将在您的数字后为您提供“precisionVal”0。

前任:

double doubleVal = 3;
int preisionVal = 2
Run Code Online (Sandbox Code Playgroud)

3.000000 变成 3.00

  • 请注意,这是截断而不是四舍五入 (4认同)