繁体   English   中英

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

[英]C++: What is the printf() format spec for “float”?

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

过去,我使用%g表示float%lg表示double

它看起来像spec改变了, 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 {
    ...

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

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

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

对于消息体中的问题:是和否。

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

%g一直是漂浮或双(因为浮动参数都提升到一倍像可变参数函数的正确格式printf )。

%lg被添加为%g的同义词(在C99中,我不知道C ++何时或是否采用它),可能是为了更好地与*scanf系列对称。

$Lg是长双。

您可以在上面用fe替换g ,具体取决于您想要的输出格式。

来自: http//www.cplusplus.com/reference/clibrary/cstdio/printf/

%f十进制浮点数392.65

其他人已经指出了使用printf打印float的格式,但是,由于你使用的是C ++,我的建议是完全避免这种情况。

相反,使用C ++流,您不必担心格式说明符。 它也是类型安全的,而printf则不是。

#include <iostream>

int main()
{
  float f = 1.234;
  std::cout << f << std::endl;
}

如果你有一个包含float的字节数组,请将它memcpy到float变量中并使用上面的代码。

printf("float: %f", floatValue);

或者如果你想要指数表示法:

printf("float: %e", floatValue);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM