视觉C++:"float"的 printf() 格式规范是什么?
visual C++: What is the printf() format spec for "float"?
C++:float
的printf()
格式规范是什么?(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
,它会没事的。现在不行了。
double和float使用与printf
(%a
、%e
、%f
和%g
(相同的格式说明符。这是因为printf
是一个变差函数。在调用之前,任何浮点参数都会隐式提升为双精度;实际上不能将浮点值传递给printf
。
对于标题中的问题:没有/"%f">
对于消息正文中的问题:是和否
CCD_ 22是一个变差函数。所有float
参数都会自动升级为double
s。您通过将浮点值传递给printf来打印它,但实际上没有浮点值到达printf函数。
其他人已经指出了使用printf
打印float的格式,但是,由于您使用的是C++,我的建议是完全避免这种情况。
使用C++流,这样就不必担心格式说明符了。它也是类型安全的,而printf
不是。
#include <iostream>
int main()
{
float f = 1.234;
std::cout << f << std::endl;
}
如果您有一个包含浮点的字节数组,请将其memcpy
转换为一个浮点变量,并使用上面的代码。
%g
始终是float或double的正确格式(因为对于像printf
这样的变元函数,float参数被提升为double(。
添加%lg
作为%g
的同义词(在C99中,我不知道C++何时或是否采用了它(,可能是为了更好地与*scanf
家族对称。
$Lg
代表长双。
您可以在上面用f
或e
替换g
,具体取决于您想要的输出格式。
来源:http://www.cplusplus.com/reference/clibrary/cstdio/printf/
%f十进制浮点392.65
printf("float: %f", floatValue);
或者如果你想要指数表示法:
printf("float: %e", floatValue);
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- C++ 将字符串数据包转换为 iphdr语言 - 字符串数据包的格式应该是什么?
- 这种日期和时间格式是什么?
- SDL 中 screenSurface->格式的含义是什么?
- error_code的格式说明符是什么
- '|' scanf 格式字符串是什么意思
- 此示例中指定的此 128 位 AES 密钥的格式是什么
- 学习阅读 ISO C++ 标准所需的逻辑格式和词汇的最佳方法是什么?
- MD5哈希的密码盐字符串的格式是什么?
- 以下程序的格式说明符可能是什么?
- 语言环境"en_US"中 std::time_get::get_time() 的正确时间格式是什么?
- "%p 格式说明符的参数类型是 'void*'"是什么意思?
- c++的生成文件的格式是什么
- windows CopyFile的正确输入格式是什么
- 使用 swprintf() 打印"0x0"的格式字符串应该是什么?
- 编写此指针函数代码的长格式方法是什么
- 联合初始值设定项列表的正确格式是什么?
- C++:这种构造函数格式是什么意思
- %[^n]在scanf()格式字符串中是什么意思
- BOOST程序选项命令行的格式是什么?