了解有关C语言中的类型转换的信息,我想知道我是否只需要使(浮点数)位于南瓜价格的前面,或者让南瓜价格,销售和工作的天数像我正在观看的教程。
float avg_profit;
int price_of_pumpkin = 10;
int sales = 59;
int days_worked = 7;
avg_profit = (float)price_of_pumpkin * sales / days_worked;
printf("Average daily profit: $%.2f", avg_profit);
答案 0 :(得分:3)
您只需要在公式中强制转换第一个变量。将price_of_pumpkin
强制转换为float
后,乘法结果也将变为float,并且将执行float除法。
如果在教程中建议将每个变量都转换为公式中的变量,则最好观看其他教程,或者甚至最好看一本书。
答案 1 :(得分:2)
对于运算符*
和/
,如果其中一个操作数为float
,则在执行该操作之前,所有整数类型的其他操作数都将转换为float
,结果再次是float
。
如果您有一系列这样的运算符,那么您必须考虑关联性。 +
,-
,*
和/
等数学运算符的关联性从左到右。
所以-要回答您的问题-将第一个操作数转换为float
就足够了;如有必要,其他操作数将隐式转换。
答案 2 :(得分:2)
如果我只需要在南瓜价格前面加上(浮动)
在C中,许多*,/,+,-
之类的运算符(并非全部)在通常的提升之后要求操作数是同一类型。
当它们不同时,其中一个将转换为另一个的类型。
在int math_operator float
,float math_operator int
的情况下,int
被转换为float
。
让我们尝试不同的方式。
int price_of_pumpkin = 10;
int sales = 59;
int days_worked = 7;
avg_profit1
将打印为"84.29"
还是"84.00"
?
float avg_profit1 = price_of_pumpkin * sales / days_worked;
float = int * int / int
首先使用int
算术进行数学运算,然后转换为float
。
84.00
avg_profit2
将打印为"84.29"
还是"84.00"
?
float avg_profit2 = (float)price_of_pumpkin * sales / days_worked;
float = float * int / int
首先使用float
算术进行所有数学运算,然后赋值。
84.29
avg_profit3
将打印为"84.29"
还是"84.00"
?
float avg_profit3 = (float)price_of_pumpkin * (float)sales / days_worked;
float = float * float / int
首先使用float
算术进行所有数学运算,然后赋值。
84.29
“我需要为每个变量添加(浮动)吗?” ->否。在这种情况下,将更多对象投射到float
并没有改变。
高级细节。
在C允许的情况下,甚至可以使用float * float / float
或double
数学来完成long double
,这取决于FLT_EVAL_METHOD
的值,是使用精度更高的数学。