【发布时间】:2021-09-14 04:00:48
【问题描述】:
在一个旧的 C++ 项目中挖掘错误时,我遇到了一个(对我而言)奇怪的 _fcvt 行为 将double转换为字符串的函数
int decPos, isNeg;
char buffer[100];
_fcvt_s(buffer, sizeof(buffer), 0.0000, 2, &decPos, &isNeg); // buffer == "00"
_fcvt_s(buffer, sizeof(buffer), 1.0000, 2, &decPos, &isNeg); // buffer == "100"
我希望 _fcvt 的第一次调用会用“000”而不是“00”填充缓冲区。
这导致了我正在寻找的错误。
这是 _fcvt 中的错误(例如,由操作系统或区域设置引起)还是设计使然?
我正在使用最新的 Windows 10 和 VS2019
通过省略该函数,解决方法很简单:
double val = 0.0;
int numDec = 2;
std::ostringstream sout;
sout << std::setprecision(numDec) << std::fixed << val;
string test = sout.str(); //0.00
【问题讨论】:
-
在阅读了documentation 之后,这种行为对我来说是有意义的,即使我从未使用过该功能并且可能永远不会使用。我猜
decPos第一行是 0,第二行是 1。
标签: c++ converters