ifc-expressions
Version:
Parsing and evaluation of IFC expressions
30 lines (29 loc) • 1.17 kB
JavaScript
import { Func } from "../Func.js";
import { FuncArgInt } from "../arg/FuncArgInt.js";
import { NumericValue } from "../../../value/NumericValue.js";
import { FuncArgNumeric } from "../arg/FuncArgNumeric.js";
import { ExprEvalSuccessObj } from "../../ExprEvalResult.js";
import { Decimal } from "decimal.js";
import { Type } from "../../../type/Types.js";
export class ROUND extends Func {
constructor() {
super("ROUND", [
new FuncArgNumeric(true, ROUND.KEY_INPUT),
new FuncArgInt(false, ROUND.KEY_NUM_DECMIALS, new NumericValue(0)),
]);
}
getReturnType(argumentTypes) {
return Type.NUMERIC;
}
calculateResult(callingExpr, evaluatedArguments) {
const input = evaluatedArguments.get(ROUND.KEY_INPUT);
const numDecimals = evaluatedArguments.get(ROUND.KEY_NUM_DECMIALS);
const rounded = input
.getValue()
.toDecimalPlaces(numDecimals.getValue().toNumber(), Decimal.ROUND_HALF_UP);
return new ExprEvalSuccessObj(new NumericValue(rounded));
}
}
ROUND.KEY_INPUT = "input";
ROUND.KEY_NUM_DECMIALS = "num_decimals";
//# sourceMappingURL=ROUND.js.map