[英]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。
解决它的最简单方法是使其中一个值成为float
或double
。 例如:
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;
此时,将使用浮点算术执行除法,您将得到期望的答案。
这不是您最初的问题的解决方案,但我建议您学习两个新知识:
这样,您既不应在JSP中嵌入脚本或样式。 您将有一天要感谢您付出的努力,因为维护和重新设置页面样式会更加容易。
你的计算方式
float per=(num/totbrwdbksint)*100
执行是将(num/totbrwdbksint)
的结果舍入为零。
尝试
float per=((float)num/(float)totbrwdbksint)*100
以获得更好的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.