C++:printf()
的float
格式规范是什么? (Visual C++)
过去,我将%g
用作float
,将%lg
用作double
。
看起来规范已更改,并且float
是未定义的,而double
是%g
。
我的内存中有一些要打印的内容,因此无法进行强制转换。
有没有一种方法可以使用float
打印出printf()
值?
更新:
编写此代码是为了对嵌入式系统上使用的通用C++库进行单元测试。
这是使float
工作所需要做的。
该代码在模板函数中:
template <typename T,typename TTYP,typename Ttyp,int bits,bool IsSigned>
Error testMatrixT()
{ ...
这是一个代码片段:
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 {
...
是不是很丑?使用浮点数作为args会产生错误的输出。也许是由于使用了
_snprintf()
吗?几年前,我将使用
%lg
,这样就可以了。不再。 最佳答案
double和float使用与 printf
相同的格式说明符(%a
,%e
,%f
和%g
)。这是因为printf
是可变参数。在调用之前,任何float参数都隐式提升为double;您实际上无法将浮点数传递给printf
。
关于C++: "float"的printf()格式规范是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7197589/