使用Sum的除法不起作用

时间:2013-03-25 16:39:18

标签: c# sum division

在我的程序中,我创建了一个自定义类的列表。该类包含一个整数属性。我希望将另一个给定的整数除以列表中这些属​​性的总和 - 但是Sum()不能在分区中正常工作。

我为你创建了一个简短的演示,它是一个简单的控制台应用程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sum
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Class> list = new List<Class>() {
                new Class() { Property = 1},
                new Class() { Property = 1},
                new Class() { Property = 1},
                new Class() { Property = 1},
                new Class() { Property = 1},
                new Class() { Property = 1}
            };

            Console.WriteLine("Sum: " + list.Sum(x => x.Property));
            Console.WriteLine("Division: " + (2 / list.Sum(x => x.Property)));
            Console.ReadLine();
        }
    }

    public class Class
    {
        public int Property { get; set; }
    }
}

我知道我可以在新变量中保存属性的总和,然后将其用于我的部门。但是Sum不应该在这种情况下成功吗?

5 个答案:

答案 0 :(得分:4)

这里的问题是你使用整数除法,它只支持整数。您希望改为执行支持小数的浮点除法

Console.WriteLine("Division: " + ((double)2 / list.Sum(x => x.Property)));

答案 1 :(得分:2)

Sum实际上有效,但结果为0,因为您使用整数除法:intint =&gt;结果将为int,您应该更改:

(2.0 / list.Sum(x => x.Property))

它会起作用

答案 2 :(得分:2)

那是因为你使用的是整数除法,而不是浮点除法。尝试使用2f代替float常量:

Console.WriteLine("Division: " + (2f / list.Sum(x => x.Property)));

2d改为double常数:

Console.WriteLine("Division: " + (2d / list.Sum(x => x.Property)));

2m改为decimal常数:

Console.WriteLine("Division: " + (2m / list.Sum(x => x.Property)));

任何人都会给你你想要的结果(准确性只有一些差异)

答案 3 :(得分:2)

我假设您期望结果为2 / 6 = 0,33,但整数除法总是产生一个整数(在C#中)。因此,至少有一个数字必须是浮点类型,如double

Console.WriteLine("Division: " + (2d / list.Sum(x => x.Property)));
  

该除法将结果舍入为零,且绝对值为   结果是最大可能的整数小于   两个操作数的商的绝对值。结果为零   当两个操作数具有相同的符号且为0或0时为正   当两个操作数具有相反的符号时为负。

http://msdn.microsoft.com/en-us/library/aa691373(v=vs.71).aspx

答案 4 :(得分:0)

我认为它会将0写入输出,因为整数除法。