Сумма не будет добавлять десятичные разряды (двойные) - PullRequest
0 голосов
/ 05 марта 2012

Когда я вызываю этот метод, он возвращает только цифры до запятой, например:

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 ]

7 голосов
/ 05 марта 2012

Посмотрите на ваши параметры:

public string CalculateSum(List<int> listDouble)

Это список целых чисел , несмотря на название. Если вы подразумевали, что это список двойников, вы должны изменить тип:

public string CalculateSum(List<double> listDouble)

Вам также необходимо раскомментировать правильную реализацию Sum ... возвращая результат вызова ToString для возвращаемого значения из Enumerable.Select на самом деле не будет делать то, что вы хотите.

3 голосов
/ 05 марта 2012

Ваш метод не имеет смысла. Вы переводите каждый элемент в списке из int s (целые числа - вы знаете, целые значения, отсюда и проблема) в double, который не изменит фактическое числовое значение, и затем взять строковое представление списка. Это не должно даже дать вам 6. Я думаю, что вы имели в виду:

public string CalculateSum(List<<b>double</b>> listDouble)
{
     return listDouble.<b>Sum()</b>.ToString();
}
2 голосов
/ 05 марта 2012

Вы передаете список целых чисел.Целые числа не могут содержать десятичные значения.

1 голос
/ 05 марта 2012

Похоже, вы суммируете целые числа вместо десятичных, попробуйте заменить

List<int>

до

List<decimal>

в подписи вашего метода

1 голос
/ 05 марта 2012

Когда вы используете целые числа, ваш номер автоматически анализируется, что сбрасывает десятичные точки. Вам нужно использовать Double для представления вашей переменной - тогда вы сможете сохранить свои десятичные дроби.

1 голос
/ 05 марта 2012
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) 
1 голос
/ 05 марта 2012

Вы не можете с этим методом.Он будет приводить двойные числа к целым числам перед их добавлением.

Если у вас всегда есть только одно место после десятичной точки, вы можете умножить каждое число на 10, получить сумму и разделить результат на 10.

1 голос
/ 05 марта 2012

ваш список Double не содержит двойников!Это список целых чисел!

public string CalculateSum(List<double> listDouble)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...