2014-02-03 15 views
4

Я хотел бы иметь возможность умножать все члены заданного числового массива друг на друга.C#: Умножить элементы массива друг на друга

Так, например, для массива вроде: [1,2,3,4], я хотел бы получить продукт 1*2*3*4.

Я попытался это, но не получилось:

/// <summary> 
/// Multiplies numbers and returns the product as rounded to the nearest 2 decimal places. 
/// </summary> 
/// <param name="decimals"></param> 
/// <returns></returns> 
public static decimal MultiplyDecimals(params decimal[] decimals) 
{ 
    decimal product = 0; 

    foreach (var @decimal in decimals) 
    { 
     product *= @decimal; 
    } 

    decimal roundProduct = Math.Round(product, 2); 
    return roundProduct; 
} 

Я сожалею, что я знаю, что это должно быть просто!

Спасибо.

+13

Вы начинаете со значением 0. Что обычно происходит, когда вы умножаете что-то на 0? –

ответ

7

Еще одна возможность показать мощь LINQ:

public static decimal MultiplyDecimals(params decimal[] decimals) 
{ 
    return decimals.Aggregate(1m, (p, d) => p * d); 
} 

This

  • начинается с начального значения 1 (модификатор m статически типов константа, как decimal) и то
  • итеративно умножает все значения.

EDIT: Здесь вариант, который включает округление. Я опустил это, потому что я не думаю, что это необходимо (у вас нет проблем с плавающей точкой с decimal), но здесь для полноты:

public static decimal MultiplyDecimals(params decimal[] decimals) 
{ 
    return Math.Round(decimals.Aggregate(1m, (p, d) => p * d), 2); 
} 
+0

Мне нравится подход LINQ, но вам нужно добавить округление –

+1

@SergeyBerezovskiy: Спасибо, исправлено! – Heinzi

+0

@Heinzi О да, извините. Я полностью забыл об этом. Пожалуйста, проигнорируйте мой комментарий, затем :-) – sloth

2

проверить это;

public static decimal MultiplyDecimals(params decimal[] decimals) 
{ 
    decimal product = 1; // here is difference! 

    foreach (var @decimal in decimals) 
    { 
     product *= @decimal; 
    } 
    decimal roundProduct = Math.Round(product, 2); 
    return roundProduct; 
} 
1

Изменение этого:

decimal product = 0; 

к этому:

decimal product = 1; 

Вы начали умножении на 0, вот почему.

2

Вы должны установить значение десятичного продукта на 1 или выше, потому что х * 0 каждый раз в 0

->decimal product = 1;

Смежные вопросы