C++:"float"的printf()格式规范是什么?

Mic*_*ick 8 c++ format printf visual-c++

C++:printf()格式规范是float什么?(Visual C++)

它曾经是我用%gfloat%lgdouble.

它看起来像规格改变了,并且float是未定义double%g.

我打印出来的内存中的位数因此不能选择.

有没有办法可以打印出floatprintf()

更新:

此代码是为在嵌入式系统上使用的通用C++库的单元测试而编写的.这是我必须做的float工作才能开始工作.代码在模板函数中:

template <typename T,typename TTYP,typename Ttyp,int bits,bool IsSigned> 
Error testMatrixT() 
{ ...
Run Code Online (Sandbox Code Playgroud)

这是一个代码片段:

if (typeid(Ttyp) == typeid(float)) {    
    float64 c = *(float32*)&Tp(row,col);
    float64 a1 = *(float32*)&Arg1(row,col);
    float64 a2 = *(float32*)&Arg2(row,col);
    float64 e = *(float32*)&Exp(row,col);
    m_b = (c == e);
    _snprintf(m_acDiag, sizeof(m_acDiag)-1
        , "add(Arg1,Arg2): arg1=%g, arg2=%g, Expected=%g, Actual=%g, Result: %s"
        , a1, a2, e, c, BOOL_PF(m_b));
} else {
    ...
Run Code Online (Sandbox Code Playgroud)

相当丑陋不是吗?使用浮点数作为args会产生不良输出.也许是因为使用_snprintf()?多年前我会用%lg,也没关系.不再.

Ste*_*non 18

双和浮子使用相同的格式说明与printf(%a,%e,%f,和%g).这是因为它printf是一种可变函数.在调用之前,任何浮点参数都会被隐式提升为double; 你实际上无法将浮动传递给printf.


eq-*_*eq- 5

对于标题中的问题:没有/“%f”

对于邮件正文中的问题:是和否。

printf是一个可变参数函数。所有float参数都会自动提升为doubles。您可以通过将浮点数传递给 printf 来打印它,但实际上没有浮点数到达 printf 函数。