C 我是否需要为每个变量添加(浮点)?

C 我是否需要为每个变量添加(浮点)?,c,C,在学习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: $%.2

在学习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);

您只需要在公式中强制转换第一个变量。一旦您将南瓜的
price\u
转换为
float
,乘法的结果也将变成float,并且将执行浮点除法


如果在教程中建议将每个变量强制转换为公式,最好看其他教程,或者最好读一本书。

对于运算符
*
/
,如果其中一个操作数是
float
,然后,在执行该操作之前,任何其他整数类型的操作数都将转换为
float
,结果同样是
float

如果你有一个这样的操作符链,那么你必须考虑到结合性。像
+
-
*
/
这样的数学运算符的关联性是从左到右的

因此,为了回答您的问题,将第一个操作数强制转换为浮点值就足够了;如有必要,其他操作数将进行隐式转换

如果我只需要有(浮动)在前面的南瓜价格

在C语言中,许多运算符,如
*,/,+,-
(并非全部)要求操作数在通常的升级后为相同的类型

当它们不同时,其中一个将转换为另一个的类型

int-math\u运算符float
float-math\u运算符int
的情况下,
int
转换为
float


让我们尝试不同的方法

int price_of_pumpkin = 10;
int sales = 59;
int days_worked = 7;
是否将
avg_profit1
打印为
“84.29”
“84.00”

float=int*int/int
首先使用
int
算术进行计算,然后转换为
float

84.00

是否将
avg_profit2
打印为
“84.29”
“84.00”

float=float*int/int
首先使用
float
算法进行所有运算,然后赋值。
84.29

是否将
avg_profit3
打印为
“84.29”
“84.00”

float=float*float/int
首先使用
float
算法进行所有运算,然后赋值。
84.29

“是否需要为每个变量添加(浮点值)?-->否。将更多对象强制转换为
float
不会改变这种情况


高级细节


即使是
float*float/float
也可以使用C语言允许的
double
long double
数学来完成,这取决于
FLT\u EVAL\u方法的值,以及使用更高精度的数学。

建议显式转换所有内容并不可怕。它使你不必记住所有的优先级和关联性规则,但事实并非如此。假设公式为
x+y/3
。也许最好的规则是从一开始就有适当类型的变量;-)@AnttiHaapala如果你的意思是在一般情况下它可能不是真的,我同意。更正了我的陈述,使之更加清晰。@Barmar我相信,知道这个规则比货教铸造更好,因为货教铸造使代码冗长且难以阅读。但这只是我。我不认为这是一个明确的,小心的货物。类似地,我经常建议添加额外的括号以使您的预期分组更加清晰,因为在许多情况下,默认优先级并不直观。即使程序员知道规则,也会让读者更容易理解。旁白:你为什么要考虑
float
而不是
double
?在上下文中,价格应该是一个浮点(
double
float
)数量。这就足够了。假设你不卖部分南瓜(半个南瓜),那么数量(
sales
)作为一个整数是有意义的。如果只计算整天,那么
工作天数
可以保持为整数,但如果可能工作半天,那么可能也应该是一个浮点值。
float avg_profit1 = price_of_pumpkin * sales / days_worked;
float avg_profit2 = (float)price_of_pumpkin * sales / days_worked;
float avg_profit3 = (float)price_of_pumpkin * (float)sales / days_worked;