在 C++ mfc 中格式化浮点数

format float in C++ mfc

我在windows中用VS2010搭建了一个MFC程序 7.我想对生成的报表中的浮点数据进行格式化。

我曾尝试使用 %f,但报告中显示“%f”。

CString m_Iwork_min;
struct   m_report_info;
m_Iwork_min = ......;
......
m_report_info.Iwork = "Pass, %f, %f, %f", atof(m_Iwork_min), 
atof(m_Iwork_max), atof(Value[0].c_str());

预期结果:

Pass, 1.2, 3.4, 5.67

实际结果:

Pass, %f, %f, %f

它不会自己填充格式字符串,您必须调用一个函数来完成。 snprintf 可用于此,但在您的情况下,您可能正在寻找 CString::Format。很难说你的代码中发生了什么,因为没有 MCVE,所以我做了一些假设并得到以下 运行:

#include <tchar.h>
#include <atlstr.h>
#include <string>

int main()
{
    CString m_Iwork_min = "1.2";
    CString m_Iwork_max = "3.4";
    std::string Value[] = { "5.67", "foo", "bar" };
    CString Iwork;
    Iwork.Format(_T("Pass, %lf, %lf, %lf"), _tstof(m_Iwork_min),
        _tstof(m_Iwork_max), atof(Value[0].c_str()));
    _tprintf(_T("%s"), (LPCTSTR)Iwork);
    return 0;
}

输出:

Pass, 1.200000, 3.400000, 5.670000

您代码中的 c_str 使您看起来像是想要 CStringstd::string 的混合。这真的是你想要的吗?确保在您的问题中始终包含一个最小的、完整的和可验证的示例,它们可以更轻松地帮助您。