我想计算两个浮点数的平均值,但无论输入什么,我都会得到一个返回的整数。
我该怎么做才能使这项工作?
public class Program
{
public static float Average(int a, int b)
{
return (a + b) / 2;
}
public static void Main(string[] args)
{
Console.WriteLine(Average(2, 1));
}
}
答案 0 :(得分:14)
您的代码存在两个问题
1 / 2 == 0
不是0.5
,因为结果必须是整数a + b
可能会溢出int.MaxValue
,您将获得否定结果最准确的实施是
public static float Average(int a, int b)
{
return 0.5f * a + 0.5f * b;
}
试验:
Average(1, 2); // 1.5
Average(int.MaxValue, int.MaxValue); // some large positive value
答案 1 :(得分:9)
诀窍是将表达式写为carbon IS
,也避免0.5 * a + 0.5 * b
溢出的可能性(承认Dmitry Bychenko)。
目前,您的表达式是在整数算术中计算的,这意味着任何小数部分都将被丢弃。
在将每个术语中的一个值设置为浮点文字时,整个表达式将以浮点计算。
最后,如果您希望表达式的类型为int
,请使用
float
0.5f * a + 0.5f * b
后缀用于表示f
字面值。
答案 2 :(得分:2)
return (a + b) / 2F;
告诉编译器将数字视为浮点数,否则它将被视为int
。
答案 3 :(得分:2)
使用此:
public static float Average(int a, int b)
{
return (float)(a + b) / 2;
}
答案 4 :(得分:0)
您可以使用:
(float)(a + b) / 2.0
这将返回float
对不起,如果有人回答的方式相同(我没有读完所有答案)