Published using Google Docs
Split the Bill
Updated automatically every 5 minutes

<cfcomponent>

        <cffunction name="split" access="public" returntype="array">

                <cfargument name="bill"  type="numeric" required="yes" >

        <cfargument name="people"  type="numeric" required="yes" >

        <cfset var returncosts = ArrayNew(1)>

        <cfset var tallytest = 0>

        <cfset var cost = decimalformat(arguments.bill/arguments.people)>

        <!--- Get pennies that we are short if any --->

        <cfset var diff = (bill - (cost*arguments.people))*100>

               

                <!--- Creat the array of costs --->

        <cfloop from="1" to="#arguments.people#" index="i">

                <cfset arrayappend(returncosts,cost)>

        </cfloop>

        <!--- Spread out the diff --->

        <cfloop from="1" to="#abs(diff) + 1#" index="i">

                <cfif diff gt 0>

                        <cfset returncosts[i] = returncosts[i] + .01>

            <cfelse>

                    <cfset returncosts[i] = returncosts[i] - .01>

            </cfif>

        </cfloop>

       

        <!--- Testing purposes only lets make sure we are adding back up to bill --->

        <cfloop from="1" to="#arguments.people#" index="i">

                <cfset tallytest = tallytest + returncosts[i]>

        </cfloop>

        <cfset arrayappend(returncosts,diff)>

        <cfset arrayappend(returncosts,tallytest)>

               <cfreturn returncosts>

        </cffunction>

</cfcomponent>