Skip to content

Instantly share code, notes, and snippets.

@ghalimi
Last active April 27, 2023 16:40
Show Gist options
  • Save ghalimi/4590215 to your computer and use it in GitHub Desktop.
Save ghalimi/4590215 to your computer and use it in GitHub Desktop.
PMT Function
// Copyright (c) 2012 Sutoiku, Inc. (MIT License)
// Some algorithms have been ported from Apache OpenOffice:
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
function PMT(rate, periods, present, future, type) {
// Credits: algorithm inspired by Apache OpenOffice
// Initialize type
var type = (typeof type === 'undefined') ? 0 : type;
// Evaluate rate (TODO: replace with secure expression evaluator)
rate = eval(rate);
// Return payment
var result;
if (rate === 0) {
result = (present + future) / periods;
} else {
var term = Math.pow(1 + rate, periods);
if (type === 1) {
result = (future * rate / (term - 1) + present * rate / (1 - 1 / term)) / (1 + rate);
} else {
result = future * rate / (term - 1) + present * rate / (1 - 1 / term);
}
}
return -result;
}
Copy link

ghost commented Jan 27, 2020

Thanks for your beautifull code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment