浮点除法返回整数

时间:2016-12-21 08:48:12

标签: c#

我想计算两个浮点数的平均值,但无论输入什么,我都会得到一个返回的整数。

我该怎么做才能使这项工作?

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));
    }
}

5 个答案:

答案 0 :(得分:14)

您的代码存在两个问题

  1. 明显的一个 - 整数除法 - 例如1 / 2 == 0不是0.5,因为结果必须是整数
  2. 隐藏的一个 - 整数溢出 - 例如a + b可能会溢出int.MaxValue,您将获得否定结果
  3. 最准确的实施是

    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

对不起,如果有人回答的方式相同(我没有读完所有答案)