Sum不会添加小数位(双打)

时间:2012-03-05 18:45:38

标签: c# web-services soap sum

当我调用此方法时,它只返回小数位前的数字,例如:

1

2

3

= 6

这很好,但是当我尝试时:

1.5

2

3.5

= 6 

如何将小数位相加?

public class Service1 : System.Web.Services.WebService
{

    [WebMethod]


    public string CalculateSum(List<int> listDouble)
    {
        return listDouble.Sum().ToString();


    }
}

}

如果我使用公共字符串CalculateSum(List<double> listDouble),则结果始终为0.

无论我输入什么内容。

这就是我传递信息的方式:

        {
            CalculateSumOfList.ServiceReference1.Service1SoapClient client = new CalculateSumOfList.ServiceReference1.Service1SoapClient();
            CalculateSumOfList.ServiceReference1.ArrayOfInt arrayOfInt = new CalculateSumOfList.ServiceReference1.ArrayOfInt();
            arrayOfInt.AddRange(listDouble.Select(d => (int)d).ToList());

string result = client.CalculateSum(arrayOfInt);
label1.Text = Convert.ToString(result);




                }

8 个答案:

答案 0 :(得分:7)

查看您的参数:

public string CalculateSum(List<int> listDouble)

这是一个整数的列表,尽管名称如此。如果你认为它是双打列表,你应该改变类型:

public string CalculateSum(List<double> listDouble)

您还需要取消注释正确的Sum实现...返回从ToString返回值调用Enumerable.Select的结果真的不会做什么你想要的。

答案 1 :(得分:3)

你的方法毫无意义。您正在将int s(整数 - 您知道,整个值,因此问题)的列表中的每个项目转换为double,这不会更改实际数值,然后取列表的字符串表示。那甚至不应该给你6。我想你的意思是:

public string CalculateSum(List<double> listDouble)
{
     return listDouble.Sum().ToString();
}

答案 2 :(得分:2)

您正在传递整数列表。整数不能包含小数值。

答案 3 :(得分:1)

你的listDouble不包含双打!它是一个整数列表!

public string CalculateSum(List<double> listDouble)

答案 4 :(得分:1)

你不能用那种方法。它会在添加之前将双精度转换为整数。

如果您在小数点后面只有一个位置,则可以将每个数字乘以10,得到总和,并将结果除以10.

答案 5 :(得分:1)

public string CalculateSum(List<int> listDouble) 
{ 
    //return listDouble.Sum().ToString(); 

     return listDouble.Select(n => (double)n).ToString(); 

} 

数据类型问题

public string CalculateSum(List<int> listDouble) 

应该是

public string CalculateSum(List<double> listDouble) 

答案 6 :(得分:1)

使用整数时,会自动解析您的数字,这会丢弃小数点。您需要使用Double来表示您的变量 - 然后您将能够保留您的小数。

答案 7 :(得分:1)

看起来你要求整数而不是小数来尝试替换

List<int>

List<decimal>

在您的方法签名