我希望能够将给定数值数组的所有成员相互相乘。
例如对于像[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;
}
对不起我知道这一定很简单!
感谢。
答案 0 :(得分:8)
展示LINQ力量的另一个机会:
public static decimal MultiplyDecimals(params decimal[] decimals)
{
return decimals.Aggregate(1m, (p, d) => p * d);
}
此
1
的初始值开头(m
修饰符将常量静态类型为decimal
),然后编辑:这是一个包含舍入的变体。我省略了它,因为我不认为它是必需的(你没有decimal
的浮点问题),但这里是为了完整性:
public static decimal MultiplyDecimals(params decimal[] decimals)
{
return Math.Round(decimals.Aggregate(1m, (p, d) => p * d), 2);
}
答案 1 :(得分: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;
}
答案 2 :(得分:2)
您必须将产品十进制的值设置为1或更高,因为x * 0每次都是0
- &GT; decimal product = 1;
答案 3 :(得分:1)
改变这个:
decimal product = 0;
到此:
decimal product = 1;
你开始乘以0就是这个原因。