C++ CString格式用%f,双精度数变成了很大的值

oxcyiej7  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(156)

我正在维护C项目,但我不是C的家人。
我遇到了一个问题,我们使用CStringdouble值转换为字符串

double Dose;
CString Dose2;
if(Dose>0)
{
    Dose2.Format("%f",Dose);
}else{
    Dose2.Format("0");
}

当我在格式为%f的代码行后设置断点时,前后的值完全不同。
你能解释为什么会出现这个问题吗?有时字符串值是正确的,有时不正确。
之前

之后

u4vypkhs

u4vypkhs1#

我试图在格式化字符串之前将Dose值写入文件,它也有很大的值。

FILE *fpversion;
fpversion = fopen("doserate.txt", "a");
fprintf(fpversion, "%f", Dose);
fclose(fpversion);

我看一下源代码中设置Dose值的另一个对话框。

if(m_MapDlg.GetSafeHwnd()!=NULL)
{
    m_MapDlg.Dose=Result;
}

我尝试创建函数来将Dose值设置为

void CMapDlg::SetDose(double dose) {
    this->Dose = dose;
}

并替换

m_MapDlg.Dose=Result;

m_MapDlg.SetDose(Result);

Dose值得到了校正值。
我把我的解决方案告诉了关心我的人。
感谢@乔纳森·莱弗勒的建议。

相关问题