C++ cv::文件存储写入双精度

C++ cv::文件存储写入双精度,c++,opencv,precision,C++,Opencv,Precision,如果我有密码: cv::FileStorage fs("foo.yaml", FileStorage::WRITE); fs << "myval" << 0.6; 当然,我知道,但为了文件的整洁,我想看一个: myval: 6.00e-01 或: 解决办法是: std::stringstream floatFormat; floatFormat << std::fixed << std::setprecision(2) << 0.6

如果我有密码:

cv::FileStorage fs("foo.yaml", FileStorage::WRITE);
fs << "myval" << 0.6;
当然,我知道,但为了文件的整洁,我想看一个:

myval: 6.00e-01
或:

解决办法是:

std::stringstream floatFormat;
floatFormat << std::fixed << std::setprecision(2) << 0.6;
fs << "myval" << floatFormat.str();
属于
string
类型

有没有什么方法可以强制OpenCV在写入值时使用指定的精度


注意,这是一个我自己使用的文件,因此我可以动态调整我的读取代码以使用
std::stof()
,但最好有一个更干净的解决方案。

您考虑过使用某种定点算法吗?在最简单的情况下,这可能是一个带有分别调整的流I/O的整数类型。很难说不知道
0.6
在您的情况下代表了什么(即必须覆盖精度的范围)。@Scheff这个数字是一个比例因子,而不是金钱价值。我做了一些研究,我认为这是不可能的。我甚至尝试将您的值转换为
cv::Mat
,并使用
cv::Formatter
限制精度。这适用于
std::cout,但不适用于
cv::FileStorage
。我认为你能做的最好的事情就是像你做的那样格式化字符串,然后把它作为一个浮点读一遍。0.6是双精度,0.6f是浮点。也许会有帮助。
myval: 0.60
std::stringstream floatFormat;
floatFormat << std::fixed << std::setprecision(2) << 0.6;
fs << "myval" << floatFormat.str();
myval: "0.60"