name:
src/main/js/formulas/math/RANDBETWEEN.ts
-rw-r--r--
1187
1import { NumException } from "../../errors/NumException";
2import { SheetColumnRowKey } from "../../models/common/SheetColumnRowKey";
3import { Complex } from "../../models/common/Types";
4import { Converters } from "../../utils/Converters";
5import { AbstractFormula } from "../AbstractFormula";
6import { FormulaName } from "../FormulaName";
7
8export class RANDBETWEEN extends AbstractFormula {
9 static SELF: RANDBETWEEN = new RANDBETWEEN();
10 NAME = FormulaName.RANDBETWEEN;
11
12 internal(origin: SheetColumnRowKey, ...values: Array<Complex>) {
13 AbstractFormula.checkLength(values.length, 2, this.NAME);
14 const low = Converters.toNumber(Converters.first(this.collateralLookup(origin, values[0])));
15 const high = Converters.toNumber(Converters.first(this.collateralLookup(origin, values[1])));
16 const lowRounded = Math.ceil(low);
17 const highRounded = Math.ceil(high);
18 if (lowRounded > highRounded) {
19 return new NumException(
20 `Formula RANDBETWEEN parameter 2 value is ${low}, but it should be greater than or equal to ${high}.`
21 );
22 }
23 const diff = Math.abs(lowRounded - highRounded);
24 return Math.round(lowRounded + Math.random() * diff);
25 }
26}