NAME App::CalcAccumulatedDiscounts - Calculate multi-year discounts from a per-year discount rate VERSION This document describes version 0.080 of App::CalcAccumulatedDiscounts (from Perl distribution App-CalcAccumulatedDiscounts), released on 2021-07-17. SYNOPSIS See the included script calc-accumulated-discounts. FUNCTIONS calc_accumulated_discounts Usage: calc_accumulated_discounts(%args) -> [$status_code, $reason, $payload, \%result_meta] Calculate multi-year discounts from a per-year discount rate. Examples: * Example #1: calc_accumulated_discounts(); Result: [ 200, "OK", [ [ "Disc p.a. \\ Year", "5y", "10y", "15y", "20y", "25y", "30y", "35y", "40y", "45y", "50y", ], [ "0.25%", "1.2%", "2.5%", "3.7%", "4.9%", "6.1%", "7.2%", "8.4%", "9.5%", "10.7%", "11.8%", ], [ "0.50%", "2.5%", "4.9%", "7.2%", "9.5%", "11.8%", "14.0%", "16.1%", "18.2%", "20.2%", "22.2%", ], [ "0.75%", "3.7%", "7.3%", "10.7%", "14.0%", "17.2%", "20.2%", "23.2%", "26.0%", "28.7%", "31.4%", ], [ "1.00%", "4.9%", "9.6%", "14.0%", "18.2%", "22.2%", "26.0%", "29.7%", "33.1%", "36.4%", "39.5%", ], [ "1.25%", "6.1%", "11.8%", "17.2%", "22.2%", "27.0%", "31.4%", "35.6%", "39.5%", "43.2%", "46.7%", ], [ "1.50%", "7.3%", "14.0%", "20.3%", "26.1%", "31.5%", "36.5%", "41.1%", "45.4%", "49.3%", "53.0%", ], [ "1.75%", "8.4%", "16.2%", "23.3%", "29.7%", "35.7%", "41.1%", "46.1%", "50.6%", "54.8%", "58.6%", ], [ "2.00%", "9.6%", "18.3%", "26.1%", "33.2%", "39.7%", "45.5%", "50.7%", "55.4%", "59.7%", "63.6%", ], [ "2.25%", "10.8%", "20.4%", "28.9%", "36.6%", "43.4%", "49.5%", "54.9%", "59.8%", "64.1%", "67.9%", ], [ "2.50%", "11.9%", "22.4%", "31.6%", "39.7%", "46.9%", "53.2%", "58.8%", "63.7%", "68.0%", "71.8%", ], [ "2.75%", "13.0%", "24.3%", "34.2%", "42.7%", "50.2%", "56.7%", "62.3%", "67.2%", "71.5%", "75.2%", ], [ "3.00%", "14.1%", "26.3%", "36.7%", "45.6%", "53.3%", "59.9%", "65.6%", "70.4%", "74.6%", "78.2%", ], [ "3.25%", "15.2%", "28.1%", "39.1%", "48.4%", "56.2%", "62.9%", "68.5%", "73.3%", "77.4%", "80.8%", ], [ "3.50%", "16.3%", "30.0%", "41.4%", "51.0%", "59.0%", "65.7%", "71.3%", "76.0%", "79.9%", "83.2%", ], [ "3.75%", "17.4%", "31.8%", "43.6%", "53.4%", "61.5%", "68.2%", "73.8%", "78.3%", "82.1%", "85.2%", ], [ "4.00%", "18.5%", "33.5%", "45.8%", "55.8%", "64.0%", "70.6%", "76.0%", "80.5%", "84.1%", "87.0%", ], [ "4.50%", "20.6%", "36.9%", "49.9%", "60.2%", "68.4%", "74.9%", "80.0%", "84.1%", "87.4%", "90.0%", ], [ "5.00%", "22.6%", "40.1%", "53.7%", "64.2%", "72.3%", "78.5%", "83.4%", "87.1%", "90.1%", "92.3%", ], ], { "table.field_aligns" => [ "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", ], }, ] * Modify years and discount rates to generate: calc_accumulated_discounts(discounts => [1, 2, 2.5], years => [5, 10]); Result: [ 200, "OK", [ ["Disc p.a. \\ Year", "5y", "10y"], ["1.00%", "4.9%", "9.6%"], ["2.00%", "9.6%", "18.3%"], ["2.50%", "11.9%", "22.4%"], ], { "table.field_aligns" => ["number", "number", "number"] }, ] This routine generates a table of accumulated discounts over a period of several years, given the annual discount rates. I first wrote this to see the accumulated fees when choosing mutual funds products. The moral of the story is, if you plan to hold a fund for a long time (e.g. 5-10 years or longer) you should pick funds that are low in annual fees (e.g. 1% or lower). Otherwise, the annual management fees will eat up most, if not all, your potential profits. This function is not exported. Arguments ('*' denotes required arguments): * discounts => *array[float]* (default: [0.25,0.5,0.75,1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25,3.5,3.75,4,4.5 ,5]) * years => *array[int]* (default: [5,10,15,20,25,30,35,40,45,50]) Returns an enveloped result (an array). First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata. Return value: (any) HOMEPAGE Please visit the project's homepage at . SOURCE Source repository is at . BUGS Please report any bugs or feature requests on the bugtracker website When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature. AUTHOR perlancar COPYRIGHT AND LICENSE This software is copyright (c) 2021, 2017, 2015 by perlancar@cpan.org. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.