Как исправить точность в 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,

Другие вопросы по тегам