package org.simantics.spreadsheet.solver.formula; import org.simantics.spreadsheet.Spreadsheets; import org.simantics.spreadsheet.solver.formula.parser.ast.AstArgList; public class RoundupFormulaFunction implements CellFormulaFunction { @Override public Object evaluate(CellValueVisitor visitor, AstArgList args) { if (args.values.size() != 2) throw new IllegalStateException(); Object number = args.values.get(0).accept(visitor); Object digits = args.values.get(1).accept(visitor); FormulaError2 err1 = FormulaError2.forObject(number); if(err1!=null) return err1.getString(); FormulaError2 err2 = FormulaError2.forObject(digits); if(err2!=null) return err2.getString(); double n = Spreadsheets.asNumber(number); double n2 = Spreadsheets.asNumber(digits); Double scale = Math.pow(10, n2); double l = Math.ceil(scale * n); Double d = Double.valueOf(l / scale); return d; } }