c#为什么我的DECIMAL为负?

时间:2010-11-11 22:20:54

标签: c#

这是我如何调用以下函数:

    List<decimal> numbers = new List<decimal>();

    numbers.Add(210m);
    numbers.Add(188.83m);
    numbers.Add(67.93m);
    numbers.Add(125.92m);
    numbers.Add(35.92m);
    numbers.Add(19.16m);
    numbers.Add(98.48m);



    List<decimal> listresult = FindSumSubset(9075.12m, numbers);

** * ** * ** * 的*** 功能 *

List<decimal> FindSumSubset(decimal sum, List<decimal> list)
            {
               for (int i = 0; i < list.Count; i++)
               {
                  decimal value = list[i];
                  if (sum - value == 0.0m)
                  {
                      return new List<decimal> { value };
                  }
                  else
                  {
                      var subset = FindSumSubset(sum - value, list.GetRange(i + 1, list.Count-1 -i));
                      if (subset != null)
                      {
                          subset.Add(value);
                          return subset;


                      }
                  }
               }
               return null;
            }

当我在调试模式下运行时,decimal sum给了我一个巨大的负值,如-93435.34

怎么会发生这种情况?

2 个答案:

答案 0 :(得分:4)

尝试进行此更改:

if (sum - value <= 0.0m)

问题是sum-value不完全是0所以它只是永远地递归。

此外,我认为您要删除for循环。如果你递归,你不需要它。

答案 1 :(得分:0)

你满溢而不是我的猜测。