0

在我的程序中,我创建了一个自定义类的列表。此类包含一个整数属性。我想将另一个给定的整数除以列表中这些属​​性的总和 - 但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在这种情况下不应该成功吗?

4

5 回答 5

4

这里的问题是您使用仅支持整数的整数除法。您想改为进行支持小数的浮点除法

Console.WriteLine("Division: " + ((double)2 / list.Sum(x => x.Property)));
于 2013-03-25T16:41:44.947 回答
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)));

任何人都会给你你正在寻找的结果(只有一些准确性差异)

于 2013-03-25T16:42:04.847 回答
2

我假设您希望结果是,2 / 6 = 0,33但整数除法总是导致整数(在 C# 中)。所以至少有一个数字必须是浮点类型,例如double.

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

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

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

于 2013-03-25T16:42:31.203 回答
2

Sum实际工作,但结果是0因为你使用整数除法:intdivides int=> result will be int,你应该改变:

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

它会工作

于 2013-03-25T16:41:23.300 回答
0

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

于 2013-03-25T16:41:52.440 回答