From 9d4bf88b4700eeb5c50d4cc6efb0a2d73e5e8b7f Mon Sep 17 00:00:00 2001 From: xuri Date: Wed, 31 Mar 2021 22:01:02 +0800 Subject: #65 fn: QUARTILE and QUARTILE.INC --- calc.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'calc.go') diff --git a/calc.go b/calc.go index 1610f5e..8f3bfb0 100644 --- a/calc.go +++ b/calc.go @@ -350,6 +350,8 @@ var tokenPriority = map[string]int{ // POWER // PRODUCT // PROPER +// QUARTILE +// QUARTILE.INC // QUOTIENT // RADIANS // RAND @@ -4625,6 +4627,40 @@ func (fn *formulaFuncs) PERMUTATIONA(argsList *list.List) formulaArg { return newNumberFormulaArg(math.Pow(num, numChosen)) } +// QUARTILE function returns a requested quartile of a supplied range of +// values. The syntax of the function is: +// +// QUARTILE(array,quart) +// +func (fn *formulaFuncs) QUARTILE(argsList *list.List) formulaArg { + if argsList.Len() != 2 { + return newErrorFormulaArg(formulaErrorVALUE, "QUARTILE requires 2 arguments") + } + quart := argsList.Back().Value.(formulaArg).ToNumber() + if quart.Type != ArgNumber { + return quart + } + if quart.Number < 0 || quart.Number > 4 { + return newErrorFormulaArg(formulaErrorNUM, formulaErrorNUM) + } + args := list.New().Init() + args.PushBack(argsList.Front().Value.(formulaArg)) + args.PushBack(newNumberFormulaArg(quart.Number / 4)) + return fn.PERCENTILE(args) +} + +// QUARTILEdotINC function returns a requested quartile of a supplied range of +// values. The syntax of the function is: +// +// QUARTILE.INC(array,quart) +// +func (fn *formulaFuncs) QUARTILEdotINC(argsList *list.List) formulaArg { + if argsList.Len() != 2 { + return newErrorFormulaArg(formulaErrorVALUE, "QUARTILE.INC requires 2 arguments") + } + return fn.QUARTILE(argsList) +} + // SKEW function calculates the skewness of the distribution of a supplied set // of values. The syntax of the function is: // -- cgit v1.2.1