ActionScript Financial Math Utility Class Library | Business Math | ActionScript

Many business applications require math operations as part of their normal use cases. To answer this recurring need, I have written an ActionScript utility class that includes many common business math equations like: compound interest, month loan payment calculator, how to calculate interest on a loan, a percentage of a number, variance, cost of goods sold (COGS), Gross Margin and many others.

The class is not exhaustive and it is a work in progress. That said I am sharing this utility class with the development community. I will continue to add new methods as time goes on. Any suggestions are always welcome.

If you would like to use the class, my only requirement is that the copyright notice and license remain intact in the source code.

Function Library


NumberOfPayments
The NumberOfPayments function determines the amount of payment that are required to pay back an amount of money.

Parameters
PaymentSchedule: The possible choices are: Bi-Weekly (every two weeks, or 2.3 times a month), Bi-Monthly (twice a month), Monthly (once a month).
TermOfLoan: How long in years is the length of the loan.

Return:The Number of payments

MonthlyLoanPayment
The monthly payment of the loan or amount of money to be repaid which includes the principal and interest.

Parameters
Principal: The initial amount of the loan
Interest: The amount of interest expressed as a decimal. Ex. 2.0, 3.75. TermLoan:The length of loan in year(s);


Return:The loan payment amount.

MonthlyInterestRate
This function determines how much interest a user will pay each month.

Parameter
AnnualInterestRate: The amount of interest, say 3.5 that is charge on an annual basis

return:
The monthly interest.


NumberOfDays
NumberOfDays calculates the difference between two random dates.

Parameters:
StartDate: The beginning date
EndDate: The final data

Return:
The number of days as an integer between the two dates.

CompoundInterest
CompoundInterest determines how much a certain amount of money will be worth after a period of time.

Parameters:
Principal: The initial amount to invest.
Interest: The rate of interest that the Principal will be invested at.
Period: The amount of time that the compounding interest will returned: Monthly, Quarterly, Yearly.
Years: The amount of years that Principal for.

Return:
The compounded interest fro the chosen period.

percentAsDecimal
This function calculates the percentage of a number

Parameters:
Percentage: The percentage needed for a targetNumber.
TargetNumber: The number fr which the percentage will be calculated.

Return:
The percentage as a decimal


percentAsNumber
Similar as the previous function, except the return value is a number

Parameters:
Percentage: The percentage value to be applied to the number.
TargetNumber: The number that the percentage will calculate

Return: The number of the percentage value

percentageVarianceDecimal
This function will calculate the variance as a percentage between two values.

Parameters:
FirstAmount: The final amount.
SecondAmount: The initial amount.

Return: The variance as a percentage.


percentageVarianceNumber
As above except the return variance value is returned as a number

Parameters:
FirstAmount: The final amount.
SecondAmount: The initial amount.

Return: The variance as a number


calculateGMROI
This function calculates the Gross Margin Return On Inventory or Gross Margin On Inventory Investment (GMROI or GMROII). This applied to retail operations where each dollar of revenue of a sellers inventory sold.

Parameters:
AverageInventoryValueAtCost: The value of the inventory at cost.
GrossMargin: The Gross Margin.

Return:
The ratio of the number of times Gross Margin is earned on inventory.


grossMargin
The Gross Margin is the profit earned between sales and cost.

Parameters:
TotalSales: The total sales at the end of a period of time.
MaterialCost: The cost of the material that were purchased and used to make the product.
LabourCost: The cost of the labour that was spent to produce the product.
OverheadCost: The amount of money in equipment, building, utilities that was spent and used to produce the product.

Return:
The Gross Margin on the sales of a product.


calculateInventoryCOGS
COGS is the Cost Of Goods Sold. Basically this function calculate the total value of an inventory at the close of a selling period.

Parameters:
OpeningInventoryValue: The value of the inventory at the start of a selling period.
PurchasesInPeriod: The total amount of new inventory purchased during the period.
ClosingInventoryInPeriod: The remaining inventory value at the end of a selling period.

Return:
The gross value of the inventory at the end of the selling period.


materialCostOfGoods
The materialCostOfGoogs calculates the total cost of the materials that were sold for a given selling cycle, example in the last 24 hours. It is measured by multiplying the quantity sold by the material cost per unit.

Parameters:
QuantitySold: This is the total quantities of products that were sold in a given selling period.
MaterialCostPerUnit: The material cost is the cost for one unit or product.

Return:
Total material cost for the quantity of products sold in a given period; 24 hours, a week, month, quarter or year.

labourCostOfGoods
The labourCostOfGoods is the amount labour that is used to produce one product or unit. If the product is purchased there wouldn’t be any labour cost.

Parameters:
QuantitySold: The total amount of products sold in a given period.
labourCostPerUnit: The cost of labour used to produce one product or unit.

Return:
The total cost of the labour used to produce a product.

overheadCostOfGoods
This function calculates the total amount of overhead that was needed to produce the products that were sold.

Parameters:
QuantitySold: The total amount of products sold in a given period.
overheadCostPerUnit: The amount of overhead that was spent to produce one product.

Return:
The total amount of overhead that was spent to produce the products sold.


conversionCostOfGoods
Conversion Costs is the total cost of the direct labour and overhead to produce one product. This function calculates the total conversion cost to produce the products that were sold.

Parameters:
quantitySold: Total amount of products sold.
labourCostPerUnit: The cost of direct labour needed to product one product.
overheadCostPerUnit: The cost of overhead to manufacture one product.

Return:
The total conversion cost spent to manufacture the sold products.


Code

package com.kcodebook.apps.math
{
	import flash.display.Sprite;
	/**
	 * Copyright 2011 kCodebook Software
	 * FinanceMath Class designed and developed by Kevin Languedoc
	 * The FinanceMath class can be used "as is" in both commercial, personal or educational
	 * development projects free as long as the current copyright notice remains intact and well 
	 * as this license. Furthermore, the FinanceMath class can be included in Open Source
	 * projects without alteration as long as the included copyright notice remains intact within 
	 * this class file.
	 * 
	 * Version 1.0  
	 * 
	 * */
	public class FinanceMath extends Sprite
	{
		public function FinanceMath()
		{
			
		}
		
		public var nbrPeriods:Number;
		public var balance:Number;
		public var growthRate:Number;
		public var compoundFrequency:Number;
		public var interestRate:Number;
		public var effectiveInterestRate:Number;
		public var nominalInterstRate:Number;
		public var periodicPayment:Number;
		public var futureValue:Number;
		public var presentValue:Number;
		public var cashFlow:Number;
		public var nthPeriod:Number;
		
		public const monthPeriod:String = 'Monthly';
		public const biMonthPeriod:String = 'Bi-Monthly';
		public const biWeeklyPeriod:String = 'Bi-Weekly';
		public const quarterlyPeriod:String = 'Quarterly';
		public const annuallyPeriod:String = 'Annually';
		private const nominalValue:int = 1
		
		
		
		public function NumberOfPayments(PaymentSchedule:String, TermInYears:int):Number
		{
			var NbrPayments:int;
			
			switch(PaymentSchedule)
			{
				case monthPeriod:
					NbrPayments = 12 * TermInYears
					break;
				case biMonthPeriod:
					NbrPayments = 24 * TermInYears;
					break;
				case biWeeklyPeriod:
					NbrPayments = 26 * TermInYears;
					break;
				default:
				break
				
			}
			
			return NbrPayments;
		}
		
		public function MonthlyLoanPayment(principalAmount:Number, interest:Number, LoanTerm:Number):Number
		{
			
			
			var monthlyPayment:Number=0;
			monthlyPayment = principalAmount * (MonthlyInterestRate(interest) + (MonthlyInterestRate(interest) / (((1+MonthlyInterestRate(interest))* Math.exp(12*LoanTerm))-1)));
			return monthlyPayment;
			
		}
		
		public function MonthlyInterestRate(annualInterestRate:Number):Number
		{
			var monthlyIRate:Number;
			monthlyIRate = (annualInterestRate/100)/12;
			return monthlyIRate;
		}
		public function NumberOfDays(startDate:Date, endDate:Date):Number
		{
			var NbrOfDays:Number = endDate.milliseconds - startDate.milliseconds;
			NbrOfDays = NbrOfDays / 1000;
			return NbrOfDays;
		}
		public function CompoundInterest(principal:Number, years:Number, interetRate:Number, period:String):Number
		{
			var compoundedAmount:Number;
			
				switch(period)
				{
					case monthPeriod:
						compoundedAmount = (principal*(nominalValue+(interetRate/100)))/12;
						break;
					case annuallyPeriod:
						compoundedAmount = (principal*(nominalValue+(interetRate/100)))*years;
						break;
					case quarterlyPeriod:
						compoundedAmount = (principal*(nominalValue+(interetRate/100)))/4;
						break;
					default:
						break
					
				}
				return compoundedAmount;
		}
		
		public function percentAsDecimal(percent:Number, targetNumber:Number):Number
		{
			var percentageAsDecimal:Number;
			
			percentageAsDecimal = (percent /100)*targetNumber;
			return percentageAsDecimal;
		}
		
		public function percentAsNumber(percent:Number, targetNumber:Number):Number
		{
			var percentageAsDecimal:Number;
			
			percentageAsDecimal = ((percent /100)*targetNumber)*100;
			
			return percentageAsDecimal;
		}
		
		public function percentageVarianceDecimal(firstAmount:Number, secondAmount:Number):Number
		{
			var variance:Number;
			variance = (firstAmount-secondAmount)/firstAmount;
			return variance;
		}
		
		public function percentageVarianceNumber(firstAmount:Number, secondAmount:Number):Number
		{
			var variance:Number;
			variance = ((firstAmount-secondAmount)/firstAmount)*100;
			return variance;
		}
		
		public function calculateGMROI(averageInventoryValueAtCost:Number, GrossMargin:Number):Number
		{
			var gmroii:Number;
			
			gmroii = GrossMargin / averageInventoryValueAtCost;
			
			return gmroii;
		}
		
		public function grossMargin(totalSales:Number, materialCost:Number, labourCost:Number, overheadCost:Number, quantity:Number):Number
		{
			var gmValue:Number;
			
			gmValue = totalSales - ((quantity * materialCost) - (labourCost+overheadCost));
			
			return gmValue;
		}
		
		
		public function calculateInventoryCOGS(openingInventoryValue:Number, purchasesInPeriod:Number, closingInventoryValue:Number):Number
		{
			var inventoryCogs:Number;
			
			inventoryCogs = (openingInventoryValue + purchasesInPeriod) - closingInventoryValue;
			
			return inventoryCogs;
		}
		
		
		public function materialCostOfGoods(quantitySold:Number, materialCostPerUnit:Number):Number
		{
			var materialCost:Number;
			materialCost = quantitySold * materialCostPerUnit;
			
			return materialCost;
		}
		
		public function labourCostOfGoods(quantitySold:Number, labourCostPerUnit:Number):Number
		{
			var labourCost:Number;
			
			labourCost = quantitySold * labourCostPerUnit;
			
			return labourCost;
		}
		
		public function overheadCostOfGoods(quantitySold:Number, overheadCostPerUnit:Number):Number
		{
			var overheadCost:Number;
			
			overheadCost = quantitySold * overheadCostPerUnit;
			
			return overheadCost;
		}
		
		public function conversionCostOfGoods(quantitySold:Number, labourCostPerUnit:Number,overheadCostPerUnit:Number ):Number
		{
			var conversionCost:Number;
			
			conversionCost = quantitySold * (labourCostPerUnit+overheadCostPerUnit);
			
			return conversionCost;
		}
											  
	}
}

This library although fairly extensive is still a work in progress. More functions will be added in later versions. Also the functions may be re-organized into separate packages to better group related functions per business activity. You may download the source code from the Google Code web site: FinanceMath

More by this Author


Comments 3 comments

JT Walters profile image

JT Walters 5 years ago from Florida

Hi klanguedoc,

Really fascinating hub but I am having flashback to my accounting days.

;-)

JT


klanguedoc profile image

klanguedoc 5 years ago from Canada Author

Thanks :). Writing is definitely more fun than accounting. That is what is so much fun about writing, you don't have to get bogged down with the numbers. I hope the code is useful for someone.


klanguedoc profile image

klanguedoc 5 years ago from Canada Author

Please note: I added a bug fix to the MonthLoanPayments function. The source code has been upload to the project page at Google Code

    Sign in or sign up and post using a HubPages Network account.

    0 of 8192 characters used
    Post Comment

    No HTML is allowed in comments, but URLs will be hyperlinked. Comments are not for promoting your articles or other sites.


    Click to Rate This Article
    working