2017-08-04 1 views
0

Ich bin ein Neuling auf Java, also brauche ich Ihre Hilfe für ein Projekt, an dem ich arbeite! I definiert einige Zähler, diese sind, was ich benutze:Java Division mit BigDecimal

int[] acceptCounters = {}; 
int[] acceptFailCounters = {}; 

Dann schrieb ich ihnen, wie die Verbindung mit Datenbank zu erhalten, und die Ergebnisse:

acceptCounters = guiops.getOfferStatitics(conn, "WS_GET_OFFER_ACCEPT"); 
acceptFailCounters = guiops.getOfferStatitics(conn, "WS_GET_OFFER_ACCEPT_PURCHASE_FAILED");* 

ich die Ergebnisse wie das bekommen (ich löschte die HTML-Teile):

 *__html parts__* 

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

html Teile

 <%=formatter.format((new BigDecimal(acceptCounters[i] + acceptFailCounters[i])).longValue())%> 

     <% 
      } 
     %> 

Das sind OK. Was ich finden möchte, ist die Erfolgsquote, die acceptCounters/(acceptCounters + acceptFailCounters) ist und 2 Dezimalziffern zu sehen. Um sie im gleichen Format zu halten, schrieb ich die Java-Codes wie folgt aus:

html Teile

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

html Teile

 <%=formatter.format((new BigDecimal(acceptCounters[i] /(acceptCounters[i] + acceptFailCounters[i]))).longValue())%> 

     <% 
      } 
     %> 

Aber alles was ich sehe als Ergebnis ist 0. Es sollte nahe 0,75 oder etw sein. Kannst du mir helfen, Erfolgsquote zu finden? Ich hoffe es ist klar genug.

+1

Warum verwenden Sie 'BigDecimal' überhaupt? Und lesen Sie über Integer-Division (das Ergebnis wird auch Integer sein). – Henry

+0

Verwenden Sie JSTL und formatieren https://www.tutorialspoint.com/jsp/jstl_format_formatnumber_tag.htm - es sollte nicht Java in dir sein jsp –

Antwort

1

BigDecimal hat seine eigene Divide-Methode. können Sie wie folgt verwenden:

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

BigDecimal java.math.BigDecimal.divide(BigDecimal divisor, int roundingMode)

Returns a BigDecimal whose value is (this/divisor), and whose scale is this.scale(). If rounding must be performed to generate a result with the given scale, the specified rounding mode is applied.

+0

@Cheatan Chadha Ich habe 2 Fragen dazu: Warum hast du geschrieben, 3? und gilt die Betriebssequenz hier? Ich meine erste Summierung von fail und accept und dann die Division: accept/(accept + fail). Vielen Dank. – frusciante

+0

Ich habe 3 hier für den Rundungsmodus verwendet, weil ich das Divisionsergebnis bis zu 3 Dezimalstellen haben möchte, können Sie es gemäß Ihrer Anforderung ändern. Und Reihenfolge Reihenfolge ist wichtig, erinnern Sie sich an die einfache BODMAS-Regel. –

+0

Können Sie diese Aussage verdeutlichen: ** BigDecimal java.math.BigDecimal.divide (BigDecimal divisor, int runderingMode) ** weil ich einen Fehler bekommen habe. Ich importierte die lib: <% @ page import = "java.math.BigDecimal"%> Also schrieb ich den fettgedruckten Teil wie folgt: BigDecimal.divide (BigDecimal divisor, int roundingMode). Aber ich habe Fehler, es sagt, lösche den Divisor und lösche den int; aber offc es gibt Fehler wieder, wenn ich sie lösche, da runderingMode nicht zu einer Variablen aufgelöst werden kann. Wie ich sagte, bin ich völlig neu, also brauche ich Hilfe und Klärung. Danke :) – frusciante