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

时间:2018-12-28 20:26:38

标签: 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: $%.2f", avg_profit);

3 个答案:

答案 0 :(得分:3)

您只需要在公式中强制转换第一个变量。将price_of_pumpkin强制转换为float后,乘法结果也将变为float,并且将执行float除法。

如果在教程中建议将每个变量都转换为公式中的变量,则最好观看其他教程,或者甚至最好看一本书。

答案 1 :(得分:2)

对于运算符*/,如果其中一个操作数为float,则在执行该操作之前,所有整数类型的其他操作数都将转换为float ,结果再次是float

如果您有一系列这样的运算符,那么您必须考虑关联性。 +-*/等数学运算符的关联性从左到右。

所以-要回答您的问题-将第一个操作数转换为float就足够了;如有必要,其他操作数将隐式转换。

答案 2 :(得分:2)

  

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

在C中,许多*,/,+,-之类的运算符(并非全部)在通常的提升之后要求操作数是同一类型。

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

int math_operator floatfloat 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 / floatdouble数学来完成long double,这取决于FLT_EVAL_METHOD的值,是使用精度更高的数学。