Как исправить точность в Symja?
Я использую Symja.
На http://matheclipse.org/, когда я запускаю следующую формулу:
round(100*17347*0.047)*0.01
Я получил: 815.31
При запуске следующего кода Java
ExprEvaluator exprEvaluator = new ExprEvaluator(false,100);
double d = exprEvaluator.evalf("round(100*17347*0.047)*0.01");
System.out.println(d);
Я получил: 815.3100000000001
Что мне не хватает?
1 ответ
Решение
Там нет ничего плохого в коде. Если вы хотите получить только 2 точности числа, я хочу напечатать, используйте printf()
вместо println()
ExprEvaluator exprEvaluator = new ExprEvaluator(false,100);
double d = exprEvaluator.evalf("round(100*17347*0.047)*0.01");
System.out.printf("%.2f\n", d);
Или, если вы хотите, чтобы его числовое округленное значение, вы можете использовать Java DecimalFormat
double d = 815.3100000000001;
System.out.println(d);
DecimalFormat newFormat = new DecimalFormat("#.##");
double twoDecimal = Double.valueOf(newFormat.format(d));
System.out.println(twoDecimal);
Более того, если вам не нравится его поведение, переопределите evalf
метод и использование Math.round(...)
внутри. Это приводит к вашему желанию без необходимости дополнительных методов Java. Кроме того, вы должны взглянуть на реализацию evalf
,