Logré hacer estas dos clases, pero la "puntuación" debe tener 7 dígitos después del punto. No puedo modificar la clase principal. Creo que debería usar String.format("%.7f", ...) pero no sé dónde. Por favor ayuda.
PRINCIPAL:
public class Main { public static void main(String[] args) { Calc c = new Calc(); String score = c.doCalc(args[0]); System.out.println(score); } }CALCULAR:
public class Calc { public String doCalc(String cmd) { ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("JavaScript"); try { return engine.eval(cmd).toString(); } catch (ScriptException e) { return "Invalid command to calc"; } } }Puede analizar el resultado de la cadena de nuevo a Double y enviarlo a String.format :
try { return String.format("%.7f", Double.valueOf(engine.eval(cmd).toString())); } catch (Exception e) { return "Invalid command to calc"; } Por supuesto, podría enviar el resultado directamente a String.format sin toString y valueOf de ida y vuelta, así:
return String.format("%.7f", engine.eval(cmd));Pero eso solo funciona cuando el resultado de la evaluación es un número de punto flotante válido. Para lidiar con otros casos como números enteros o no números, tendría que realizar algunas comprobaciones de tipo y hacer que el código se vea más desordenado.