diff --git a/source/Aconcagua-Core/CompoundingFormula.class.st b/source/Aconcagua-Core/CompoundingFormula.class.st new file mode 100644 index 0000000..af86eb9 --- /dev/null +++ b/source/Aconcagua-Core/CompoundingFormula.class.st @@ -0,0 +1,60 @@ +Class { + #name : #CompoundingFormula, + #superclass : #Object, + #instVars : [ + 'presentValue', + 'nominalRate', + 'timeUnits', + 'periods' + ], + #category : #'Aconcagua-Core-MeasureModel' +} + +{ #category : #calculating } +CompoundingFormula >> calculate [ + + | exponent parenthesized | + exponent := self periods * self timeUnits. + parenthesized := 1 + (self nominalRate / self periods). + ^ self presentValue * (parenthesized raisedTo: exponent) +] + +{ #category : #accessing } +CompoundingFormula >> nominalRate [ + ^ nominalRate +] + +{ #category : #accessing } +CompoundingFormula >> nominalRate: anObject [ + nominalRate := anObject +] + +{ #category : #accessing } +CompoundingFormula >> periods [ + ^ periods ifNil: [ 1 ] +] + +{ #category : #accessing } +CompoundingFormula >> periods: anObject [ + periods := anObject +] + +{ #category : #accessing } +CompoundingFormula >> presentValue [ + ^ presentValue +] + +{ #category : #accessing } +CompoundingFormula >> presentValue: anObject [ + presentValue := anObject +] + +{ #category : #accessing } +CompoundingFormula >> timeUnits [ + ^ timeUnits +] + +{ #category : #accessing } +CompoundingFormula >> timeUnits: anObject [ + timeUnits := anObject +] diff --git a/source/Aconcagua-Core/Measure.class.st b/source/Aconcagua-Core/Measure.class.st index 30cddd2..1586d88 100644 --- a/source/Aconcagua-Core/Measure.class.st +++ b/source/Aconcagua-Core/Measure.class.st @@ -179,7 +179,15 @@ Measure >> compareGreaterThan: aNumber [ ] -{ #category : 'converting' } +{ #category : #compounding } +Measure >> compoundingFormula [ + + ^ CompoundingFormula new + presentValue: self; + yourself +] + +{ #category : #converting } Measure >> convertAmountToBaseUnit [ ^self unit convertAmountToBaseUnit: self amount