title: Algo for dividing a number into (almost) equal whole numbers
body: <p>I have a situation where I have invoice spreadsheets incoming with single rows that span multiple months with a quantity column containing the summation of the quantity for all months spanned. </p>
  
  <p>In order to run month-by-month analytics, we need to split the total quantity into equal(ish) quantities across n rows where n is the number of months spanned. </p>
  
  <p>These numbers can be off by one or two, but the smaller the difference between each element the better.</p>
  
  <p>I have a rough mockup I did in python but I feel there's a better way to do this somehow. Note: Please excuse... everything:</p>
  
  
  
  <pre class="lang-py prettyprint-override"><code>from __future__ import division
  import math
  def evenDivide(num, div):
      splits = []
      sNum = str(num/div)
      remainder = float(sNum[sNum.index('.'):])
      #print "Remainder is " + str(remainder)
      integer = math.floor(num/div)
      #print "Integer is " + str(integer)
      totRemainder = round(remainder * div, 2)
      #print "Total Remainder is " + str(totRemainder)
      for index in range(div):
          if (totRemainder &gt; 0):
              totRemainder -= 1 if (index%2 == 0) else 0
              if (index % 2 == 0):
                  splits.append(int(integer + 1)) 
              else:
                  splits.append(int(integer))
          else:
              splits.append(int(integer))
      for index in range(div):
          if(totRemainder &gt; 0):
              if (index % 2 == 1):
                  splits[index] += 1
                  totRemainder -= 1
  
      return splits
  
  def EvalSolution(splits):
      total = 0
      for index in range(len(splits)):
          total += splits[index]
      return total
  
  def testEvenDivide():
      for index in range(20000):
          for jndex in range(3, 200):
              if (EvalSolution(evenDivide(index, jndex)) != index):
                  print "Error for " + str(index) + ", " + str(jndex)
  </code></pre>