在我的程序中,我创建了一个自定义类的列表。该类包含一个整数属性。我希望将另一个给定的整数除以列表中这些属性的总和 - 但是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
不应该在这种情况下成功吗?
答案 0 :(得分:4)
这里的问题是你使用整数除法,它只支持整数。您希望改为执行支持小数的浮点除法
Console.WriteLine("Division: " + ((double)2 / list.Sum(x => x.Property)));
答案 1 :(得分:2)
Sum
实际上有效,但结果为0
,因为您使用整数除法:int
除int
=&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写入输出,因为整数除法。