# File lib/money/money.rb, line 379 def allocate(splits) allocations = splits.inject(0.0) {|sum, i| sum += i } raise ArgumentError, "splits add to more then 100%" if (allocations - 1.0) > Float::EPSILON left_over = cents amounts = splits.collect do |ratio| fraction = (cents * ratio / allocations).floor left_over -= fraction fraction end left_over.times { |i| amounts[i % amounts.length] += 1 } amounts.collect { |cents| Money.new(cents, currency) } end