使用BigDecimal的Java除法

使用BigDecimal的Java除法,java,rounding,division,bigdecimal,Java,Rounding,Division,Bigdecimal,我是一个java新手,所以我需要你对我正在进行的一个项目的帮助! 我定义了一些计数器,我将使用这些计数器: int[] acceptCounters = {}; int[] acceptFailCounters = {}; 然后我就这样编写了它们,以便与数据库建立连接,并查看结果: acceptCounters = guiops.getOfferStatitics(conn, "WS_GET_OFFER_ACCEPT"); acceptFailCounters = guiops.getOffe

我是一个java新手,所以我需要你对我正在进行的一个项目的帮助! 我定义了一些计数器,我将使用这些计数器:

int[] acceptCounters = {};
int[] acceptFailCounters = {};
然后我就这样编写了它们,以便与数据库建立连接,并查看结果:

acceptCounters = guiops.getOfferStatitics(conn, "WS_GET_OFFER_ACCEPT");
acceptFailCounters = guiops.getOfferStatitics(conn, "WS_GET_OFFER_ACCEPT_PURCHASE_FAILED");*
我得到的结果是,我删除了HTML部分:

        *__html parts__*

        <%
            for (int i = 0; i < acceptCounters.length; i++) {
        %>
html部件

这些没问题。我想找到的是成功率,即acceptCounters/acceptCounters+acceptFailCounters,并看到2个十进制数字。为了使它们保持相同的格式,我编写了如下Java代码:

formatter.format((new BigDecimal(acceptCounters[i]).divide(new BigDecimal(acceptCounters[i]),3)).add(new BigDecimal(acceptFailCounters[i]));
html部件

html部件


但我看到的结果是0。它应该接近0.75或其他。你能帮我找到成功率吗?我希望这足够清楚

BigDecimal有自己的除法。您可以这样使用:

formatter.format((new BigDecimal(acceptCounters[i]).divide(new BigDecimal(acceptCounters[i]),3)).add(new BigDecimal(acceptFailCounters[i]));
BigDecimal java.math.BigDecimal.divideBigDecimal除数,整数舍入模式

返回一个BigDecimal,其值为this/除数,其小数位数为this.scale。如果必须执行舍入以生成具有给定比例的结果,则应用指定的舍入模式


你为什么要用BigDecimal?阅读整数除法,结果也将是整数。使用JSTL和format-您不应该有javajsp@Cheatan查达:我有两个问题:你为什么要写,3?操作顺序在这里有效吗?我的意思是先把失败和接受相加,然后除法:接受/接受+失败。谢谢。我在这里使用3作为舍入模式,因为我希望除法结果最多保留3位小数。您可以根据需要修改它。操作顺序很重要记住简单的BODMAS规则。你能澄清一下这句话吗:*BigDecimal java.math.BigDecimal.divideBigDecimal除数,int roundingMode**因为我出错了。我导入了lib:,所以我写了如下粗体部分:BigDecimal.divideBigDecimal除数,int roundingMode。但我得到了一个错误,它说删除除数和整数;但ofc在我删除它们时再次出现错误,因为roundingMode无法解析为变量。。正如我所说,我完全是新手,所以我需要帮助和澄清。谢谢:这只是语法部分,你不需要复制粘贴这个。这只是供你参考。我已经根据您的需要定制了格式化程序。如果你在这方面面临问题,那么一定要让我知道你得到的实际错误。谢谢。我得到了这个错误:构造函数BigDecimalint,int是未定义的,所以我看到我需要重新组织定义部分,但我无法定义它。
        <%=formatter.format((new BigDecimal(acceptCounters[i] /(acceptCounters[i] + acceptFailCounters[i]))).longValue())%>

        <%
            }
        %>
formatter.format((new BigDecimal(acceptCounters[i]).divide(new BigDecimal(acceptCounters[i]),3)).add(new BigDecimal(acceptFailCounters[i]));