始终打印以下代码"0.00".我在期待"7888".我应该把它转换成double?
long l = 7888;
printf("%.2f", l);
Run Code Online (Sandbox Code Playgroud)
Glo*_*del 13
%.2f不是a的有效格式long.你可以把它加倍:
long l = 7888;
printf("%.2f", (double)l);
Run Code Online (Sandbox Code Playgroud)
这是一个表格(向下滚动一下),您可以在其中查看所有数字类型允许的代码.
%f期望a double和l变量很长.printf()没有它的参数转换由格式说明符所需的类型都按自己神奇.
FWIW,printf()是一个可变参数函数,默认参数促销规则适用于所提供的参数,它不改变long到double,无论是.如果在所有的,你想要的转换发生,你必须投明确的参数值.
你需要写一些类似的东西
printf("%.2f", (double)l);
Run Code Online (Sandbox Code Playgroud)
请注意,此代码调用未定义的行为,没有显式强制转换.参考C11,章节§7.21.6.1,fprintf()
[....]如果任何参数不是相应转换规范的正确类型,则行为未定义.
该%f格式说明需要一个double,但你传递一个long,所以这是不确定的行为.
如果要正确打印,则需要使用%ld格式说明符将其打印为long:
printf("%ld", l);
Run Code Online (Sandbox Code Playgroud)
或者转换l为double将其打印为浮点数:
printf("%.2f", (double)l);
Run Code Online (Sandbox Code Playgroud)