【发布时间】:2011-08-25 21:43:34
【问题描述】:
C++:printf() 的 float 格式规范是什么? (Visual C++)
以前我用%g 表示float 和%lg 表示double。
看起来规范已更改,float 未定义,double 为 %g。
我有一些内存要打印出来,所以不能选择强制转换。
有没有办法可以使用printf() 打印出float 值?
更新:
此代码是为对嵌入式系统上使用的通用 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 {
...
很丑不是吗?使用浮点数作为参数会产生错误的输出。也许是因为使用了 _snprintf() ?
几年前,我会使用%lg,这样就可以了。没有了。
【问题讨论】:
-
这是我在这么多天里看到的关于打印花车的第三或第四个问题!
-
你没有提到如果你使用 %g 会发生什么。但是 %g 无论如何都不是 float 的默认值。
-
@steve:
%g适用于 float,因为它被提升为 double。
标签: c++ visual-c++ format printf