c++ - C ++ - 在变量文件名中截断双精度的小数位
问题描述
我正在尝试编写一些代码来为模拟数据生成适当的文件名。在这里,我创建了一个字符串 resultfile,它接受文本、整数和双精度数并将它们连接成一个文件名。
这是我的(简化的)当前代码:
string resultfile;
int Nx = 5;
double mu = 0.4;
//Simulation code here
resultfile += to_string(Nx) + "_mu" + to_string(mu) + ".csv";
ofstream myfile;
myfile.open ("./Datasets/"+ resultfile);
myfile << SimulationOutputs;
myfile.close();
这会将 .csv 文件保存到我的 /Datasets/ 文件夹中,但是,数据的文件名最终为:
“5_mu0.4000000.csv”
当您的文件标题包含 2 个或更多双精度时,文件名会很快变得非常大。我试图让文件名是:
“5_mu0.4.csv”
我在这里发现了一个似乎相关的问题:如何在一定数量的小数位后截断浮点数(无舍入)?,他们似乎建议:
to_string(((int)(100 * mu)) / 100.0)
但是,此编辑不会更改我的数据输出的文件名。我对 C++ 相当陌生,所以这里可能有一个明显的解决方案,但对我来说并不明显。
解决方案
您不能设置精度std::to_string
,您可以自己编写,例如:
#include <sstream>
#include <iomanip>
template <typename T>
std::string to_string_with_precision(const T& a_value, const int n = 6)
{
std::ostringstream out;
out << std::setprecision(n) << a_value;
return out.str();
}
接着
resultfile += std::to_string(Nx) + "_mu" + to_string_with_precision(mu, 2) + ".csv";
推荐阅读
- r - R中的重新编码系统缺失?
- php - 使用适用于 QuickBooks 的 Consolibyte PHP SDK,查询的正确语法是什么?
- python - heapq.heappush() 是否在未指定的情况下比较 int AND 字符串?
- flutter - 如何在不修改 Flutter 中默认提供的行为的情况下更改 appbar 的抽屉/后退按钮图标的大小?
- laravel - Laravel - 如何解决类 stdClass 的对象无法转换为字符串错误
- python-3.x - Python 字符串格式 x 或更少的数字
- excel - 使用 VBA 间接引用其他工作表中的范围
- dynamics-crm - Dynamics 365 - 从全局选项集中获取选定选项的值
- sql - SQL 从另一个表中向下日期值
- css - CSS - 固定按钮展开