Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions src/officecli/Core/Formula/FormulaEvaluator.Functions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1890,7 +1890,7 @@ private static double TvmNum(List<object> args, int i, double def)
{
if (args.Count < 3) return null;
double rate = TvmNum(args, 0, 0), nper = TvmNum(args, 1, 0), pv = TvmNum(args, 2, 0),
fv = TvmNum(args, 3, 0), type = TvmNum(args, 4, 0);
fv = TvmNum(args, 3, 0), type = TvmNum(args, 4, 0) != 0 ? 1 : 0;
if (rate == 0) return FR(-(pv + fv) / nper);
double pow = Math.Pow(1 + rate, nper);
return FR(-(pv * pow + fv) * rate / ((1 + rate * type) * (pow - 1)));
Expand All @@ -1900,7 +1900,7 @@ private static double TvmNum(List<object> args, int i, double def)
{
if (args.Count < 3) return null;
double rate = TvmNum(args, 0, 0), nper = TvmNum(args, 1, 0), pmt = TvmNum(args, 2, 0),
pv = TvmNum(args, 3, 0), type = TvmNum(args, 4, 0);
pv = TvmNum(args, 3, 0), type = TvmNum(args, 4, 0) != 0 ? 1 : 0;
if (rate == 0) return FR(-(pv + pmt * nper));
double pow = Math.Pow(1 + rate, nper);
return FR(-(pv * pow + pmt * (1 + rate * type) * (pow - 1) / rate));
Expand All @@ -1910,7 +1910,7 @@ private static double TvmNum(List<object> args, int i, double def)
{
if (args.Count < 3) return null;
double rate = TvmNum(args, 0, 0), nper = TvmNum(args, 1, 0), pmt = TvmNum(args, 2, 0),
fv = TvmNum(args, 3, 0), type = TvmNum(args, 4, 0);
fv = TvmNum(args, 3, 0), type = TvmNum(args, 4, 0) != 0 ? 1 : 0;
if (rate == 0) return FR(-(fv + pmt * nper));
double pow = Math.Pow(1 + rate, nper);
return FR(-(fv + pmt * (1 + rate * type) * (pow - 1) / rate) / pow);
Expand All @@ -1920,7 +1920,7 @@ private static double TvmNum(List<object> args, int i, double def)
{
if (args.Count < 3) return null;
double rate = TvmNum(args, 0, 0), pmt = TvmNum(args, 1, 0), pv = TvmNum(args, 2, 0),
fv = TvmNum(args, 3, 0), type = TvmNum(args, 4, 0);
fv = TvmNum(args, 3, 0), type = TvmNum(args, 4, 0) != 0 ? 1 : 0;
if (rate == 0) return pmt != 0 ? FR(-(pv + fv) / pmt) : null;
double k = pmt * (1 + rate * type) / rate;
return FR(Math.Log((k - fv) / (k + pv)) / Math.Log(1 + rate));
Expand Down Expand Up @@ -1959,7 +1959,7 @@ private static double TvmNum(List<object> args, int i, double def)
// as nper).
var pmtArgs = new List<object> { args[0], args[2], args[3] };
if (args.Count > 4) pmtArgs.Add(args[4]);
if (args.Count > 5) pmtArgs.Add(args[5]);
// Annuity-due support for PPMT/IPMT is out of scope; do not half-apply it through PMT.
var pmt = EvalPmt(pmtArgs)?.AsNumber() ?? 0;
var ipmt = EvalIpmt(args)?.AsNumber() ?? 0;
return FR(pmt - ipmt);
Expand Down