diff options
author | xuri <xuri.me@gmail.com> | 2021-03-31 22:01:02 +0800 |
---|---|---|
committer | xuri <xuri.me@gmail.com> | 2021-03-31 22:01:02 +0800 |
commit | 9d4bf88b4700eeb5c50d4cc6efb0a2d73e5e8b7f (patch) | |
tree | 8e1124e7dc9470237d1aeb33fdb0ddeb712e7432 /calc.go | |
parent | 2af96c07149e2b79a06375bdc735c0a8c1f6646e (diff) |
#65 fn: QUARTILE and QUARTILE.INC
Diffstat (limited to 'calc.go')
-rw-r--r-- | calc.go | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -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: // |