以下代码有效:
int main(void)
{
float f = get_float();
int i = round(f*100);
printf("%i\n", i);
}
Run Code Online (Sandbox Code Playgroud)
然而,如果以这种方式编码会产生错误:
printf("%i\n", round(1.21*100));
Run Code Online (Sandbox Code Playgroud)
输出说round(1.21*100)是float.那么,为什么呢
int i = round(f*100);
Run Code Online (Sandbox Code Playgroud)
很好吗?
Som*_*ude 16
当你这样做
int i = round(f*100);
Run Code Online (Sandbox Code Playgroud)
你转换double函数的结果round.转换后的结果存储在int变量中i,该变量可以与"%i"期望int参数的格式一起使用.
将直接double结果round作为参数传递给期望int格式和参数类型不匹配的格式时.这导致了不确定的行为.
没有转换在调用作出printf,并没有转换可以进行,因为里面的代码printf功能不知道实际的参数类型.它只知道格式"%i".变量参数函数丢失了所有可能的类型信息.
这是因为自动类型转换的行为.在printf中,自动类型转换不起作用.当你说%i时,它只是期望整数,它不能将double转换为整数然后打印.
在赋值操作中,double首先转换为整数,然后将其赋值给=运算符的左操作数.我希望这有帮助.