2010-01-09 67 views
1

此代碼的問題在於我將作者的受歡迎程度設置爲0%(如果借用圖書的數量爲14,並且所選作者借閱的圖書總數爲零,是3 - 應該是21.42%)。這是爲什麼發生?JSP中的計算問題

所有的結果是正確的,除了最後一個:

作者爲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(); 
%> 

<%} %> 
+1

自2001年起,Scriptlets受到阻礙。在真正的Java類中編寫Java代碼。在JSP中使用taglibs/EL來控制頁面流和訪問數據。 HTML 標記自1998年起不推薦使用。使用CSS。請扔掉那些古代書籍和教程,去拿體面的書。這一切都像roseindia.net風格,請確保您不要將該網站用作「參考」。 – BalusC 2010-01-09 14:30:27

回答

5

這是不是一個真正的JSP的問題 - 它的Java如何與整數交易算術。相關的線路有:

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

你執行「INT/INT」劃分,然後乘以100將使用整數運算執行除法- 這樣的結果將是0.1乘以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

我個人也會更喜歡(100 * num)/ totbrwdbksint。如果num明顯小於totbrwdbksint,這可以提高精度。 – extraneon 2010-01-09 10:42:10

+0

它的工作很棒。很多很多。你可以再告訴我一件事。 結果有點像26.323232%。我希望它能湊到2 decimaol的地方。怎麼做? – 2010-01-09 10:45:20

+0

@extraneon:另一方面,如果'num'非常大,它會導致潛在的溢出:) – 2010-01-09 11:10:17

0

的方式你calcualtion

float per=(num/totbrwdbksint)*100 

是四捨五入的(num/totbrwdbksint)結果爲零。

嘗試

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

,以獲得更好的結果。

1

這不是你原來的問題的解決方案,但我建議學習兩個新的東西:

  1. JSTL
  2. CSS

你應該既沒有小腳本,也沒有造型嵌入你的JSP這條路。您有一天會感謝您爲此付出努力,因爲維護和重新整理您的網頁會更容易。