[英]clang on Windows / msvc: why under FE_UPWARD printf("%.1f\n", 0.0) prints 0.1 instead of 0.0?
[英]Why printf(“%.1f”, 1) output 0.0
我使用代码块 。
当代码是:
printf("%.1f", 1);
程序可以运行,输出为0.0
。 我想知道为什么。 `
更改为:
printf("%.1f", 1.0);
f
转换说明符需要一个double
类型的参数,但是您要传递一个int
值( 1
是int
类型)。 将错误类型的参数传递给printf
调用未定义的行为。
使用错误的格式说明符会导致未定义的行为 。 您可能会得到预期的结果或意外的结果。 使用%d
代替,因为传递给printf
的参数是int
类型,或者如果使用%f
则将1
更改为1.0
。
如果转换规范无效,则行为未定义。 282)如果任何参数不是对应转换规范的正确类型,则行为未定义。
格式不正确,您应该给floatf或double作为printf函数的第二个参数。 gcc编译器还会针对程序员的此类错误给出警告。
printf("%.1f",1.23);
输出:
1.2
请谨慎对待此类错误。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.