使用std::to_string()
将双精度转换为字符串时,有什么方法可以设置结果的精度?
user955249
问问题
28210 次
3 回答
46
不。
返回:每个函数都返回一个字符串对象,该对象保存其参数值的字符表示形式,该参数值将通过分别
sprintf(buf, fmt, val)
使用格式说明符"%d"
、"%u"
、"%ld"
、"%lu"
、"%lld"
、"%llu"
、"%f"
、"%f"
或进行调用而生成"%Lf"
,其中 buf 指定一个足够的内部字符缓冲区尺寸。
于 2013-01-25T10:58:10.543 回答
7
我只是在寻找解决方案,因为我正在重载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
于 2019-04-20T03:24:23.640 回答
6
我相信使用std::stringstream
withsetprecision
将是最灵活/便携的选择,但如果您知道您的数据,作为一种解决方法,您可以尝试对结果进行子串化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()
搜索小数分隔符并使用它的位置来计算子字符串的大小,使其更具动态性。
于 2016-11-04T20:32:19.807 回答