Então para isso basta criar um variável dentro do próprio relatório, que faça a divisão da variável que recebe o valor da compra, pela variável que recebe o valor total do relatório e o resultado gerado seja multiplicado por 100
O meu problema é o seguinte, a variável que recebe o valor de cada venda é uma String: $F{valor_total_venda}
e a variável que recebe o valor total do relatório é Double $V{SOMA}:
Veja se há algum outro log com o detalhe do erro. Deve ter em algum lugar algum texto explicando se foi um erro de sintaxe ou se está faltando algo. Essa mensagem que está aparecendo está muito vaga.
Manda um print do lugar onde vc está editando a expressão.
Se vc clicar na aba inferior Text (um pouco mais abaixo do erro), vc conseguirá ver o detalhes da exceção. Vc pode copiar o texto da exceção e postar aqui.
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: String.valueOf(new BigDecimal($F{valor_total_venda}).divide(new BigDecimal($V{SOMA}), RoundingMode.DOWN))
at com.jaspersoft.studio.editor.preview.view.control.ReportController.fillReport(ReportController.java:551)
at com.jaspersoft.studio.editor.preview.view.control.ReportController.access$18(ReportController.java:526)
at com.jaspersoft.studio.editor.preview.view.control.ReportController$1.run(ReportController.java:444)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: String.valueOf(new BigDecimal($F{valor_total_venda}).divide(new BigDecimal($V{SOMA}), RoundingMode.DOWN))
at net.sf.jasperreports.engine.fill.JREvaluator.handleEvaluationException(JREvaluator.java:294)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:328)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:673)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:641)
at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1173)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:555)
at net.sf.jasperreports.engine.fill.JRFillTextField.resolveElement(JRFillTextField.java:1056)
at net.sf.jasperreports.engine.fill.JRFillElement.performDelayedEvaluation(JRFillElement.java:1140)
at net.sf.jasperreports.engine.fill.JRFillElement.delayedEvaluate(JRFillElement.java:1479)
at net.sf.jasperreports.engine.fill.JRFillElement.resolveElement(JRFillElement.java:1239)
at net.sf.jasperreports.engine.fill.ElementEvaluationAction.execute(ElementEvaluationAction.java:69)
at net.sf.jasperreports.engine.fill.DelayedFillActions.runActions(DelayedFillActions.java:271)
at net.sf.jasperreports.engine.fill.BaseReportFiller.resolveBoundElements(BaseReportFiller.java:807)
at net.sf.jasperreports.engine.fill.JRBaseFiller.resolveReportBoundElements(JRBaseFiller.java:1209)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummary(JRVerticalFiller.java:1238)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:308)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:622)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:135)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NumberFormatException: Character R is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
at java.base/java.math.BigDecimal.<init>(Unknown Source)
at java.base/java.math.BigDecimal.<init>(Unknown Source)
at java.base/java.math.BigDecimal.<init>(Unknown Source)
at Simple_Blue_1626195830545_269357.evaluate(Simple_Blue_1626195830545_269357:113)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:313)
... 18 more
Eita, deve tah sendo retornado algum número inválido, ou no valor_total_venda ou na SOMA. Será que vc não está retornando um R$ no valor não?
Por exemplo, ao tentar fazer isso:
new BigDecimal("R$200.00");
o erro que estoura é exatamente esse:
Exception in thread "main" java.lang.NumberFormatException: Character R is neither a decimal digit number, decimal point, nor "e" notation exponential mark.