繁体   English   中英

有关JSP中计算的问题

[英]Problem regarding calculation in JSP

这段代码的问题是,我的作者普及率为0%(如果借阅的图书数量为14,而所选作者的借阅图书的总数为3,则我的意思是为0%-应该为21.42% )。 为什么会这样呢?

除最后一个以外,所有结果均正确:

作者的流行度为0%(对于上述数据)

<%
String requestedoprations = request.getParameter("popularity");
if("check".equalsIgnoreCase(requestedoprations)){
    int num=LimsHandler.getInstance().popularitycheck(
        request.getParameter("selectedauthor"));
    if(num!=0){
        Limsdetails[] list = LimsHandler.getInstance().libsdetails();
        String totbks=list[0].getTot_books();
        String totbrwdbk=list[0].getTot_borrowed_bks();
        int totbksint=Integer.parseInt(totbks);
        int totbrwdbksint=Integer.parseInt(totbrwdbk);
        float per=(num/totbrwdbksint)*100;          
%>
<font color="brown">
    <b>Total No of Books Available in Library is : <%=totbksint %><br></br>
    Out of which <%=totbrwdbksint %> are borrowed.<br></br>
    <b>No of readers reading Author 
        <%=request.getParameter("selectedauthor") %>'s book. : 
        <%=num %></b><br></br>
    <b> Author <%=request.getParameter("selectedauthor") %> is <%=per %> % 
        popular!</b><br></br>
</font>

<%}else{ %>
    <h4 align="center">
        <font color="red">
            <img border="0" src="images/close.PNG" ><br></br>
            Oops! some error occurred!
        </font>
    </h4>
<%
}
out.flush();
%>

<%} %>

这实际上不是一个JSP问题,而是Java处理整数算术的方式。 相关行是:

int num = LimsHandler.getInstance().popularitycheck(...);
int totbrwdbksint = Integer.parseInt(totbrwdbk);
float per = (num / totbrwdbksint) * 100;

您正在执行“ int / int”除法,然后乘以100。这将使用整数算术执行除法-因此结果将为0。将0乘以100仍会得到0。

解决它的最简单方法是使其中一个值成为floatdouble 例如:

int num = LimsHandler.getInstance().popularitycheck(...);    
float totbrwdbksint = Integer.parseInt(totbrwdbk);
float per = (num / totbrwdbksint) * 100;

另外,您可以在表达式中进行强制转换:

int num = LimsHandler.getInstance().popularitycheck(...);
int totbrwdbksint = Integer.parseInt(totbrwdbk);
float per = (num / (float) totbrwdbksint) * 100;

此时,将使用浮点算术执行除法,您将得到期望的答案。

这不是您最初的问题的解决方案,但我建议您学习两个新知识:

  1. JSTL
  2. 的CSS

这样,您既不应在JSP中嵌入脚本或样式。 您将有一天要感谢您付出的努力,因为维护和重新设置页面样式会更加容易。

你的计算方式

float per=(num/totbrwdbksint)*100  

执行是将(num/totbrwdbksint)的结果舍入为零。

尝试

float per=((float)num/(float)totbrwdbksint)*100  

以获得更好的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM