Ich habe eine Methode, die ein Double zurückgibt

public double getOdds() {
    return odds;
}

Das funktioniert ganz gut. Das Problem ist jedoch, dass bei der Anzeige der Daten der eingefügte Wert automatisch aufgerundet wird. Ich möchte das verhindern und einen Wert mit 2 Dezimalstellen erhalten.

Hier ist meine JSP, in der ich die Methode aufrufe. Die ArrayList "Wetten" bestehen aus allen vom Benutzer eingegebenen Werten. Wie oben erläutert, gibt der Benutzer jedoch 3.0 zurück, wenn er 2.75 eingibt

ArrayList <bets> bets = betsDAO.getBets(x, y);

for (bets bet : bets) {

    <td><%=bet.getOdds()%></td>
}

Ich bin noch neu in Java und habe versucht, nach Lösungen zu suchen, aber leider konnte ich das Problem nicht lösen.

1
egx 22 Feb. 2020 im 19:09

3 Antworten

Beste Antwort

Wenn der Benutzer 2.75 eingibt, wird 3.0 zurückgegeben

Der einzige Grund dafür ist, dass der Wert irgendwann auf null Dezimalstellen begrenzt ist. Java tut dies nur für int (oder long oder short oder char oder byte) Werte, und diese werden abgeschnitten, sodass das Ergebnis {{X5 }}, nicht 3.0.

Die einzige Runde auf die nächste , die ich mir vorstellen kann, wird durch die Datenbank oder den JDBC-Treiber verursacht:

  • Der Spaltentyp in der Datenbank ist INTEGER oder NUMBER(5,0) oder so ähnlich. Überprüfen Sie Ihr Datenbankschema.

  • Der Code, der die Datenbank liest (betsDAO), ruft getInt(...) auf und der JDBC-Treiber rundet den Wert für Sie.

Wie auch immer, der Fehler liegt in Code, den Sie nicht angezeigt haben.

2
Andreas 22 Feb. 2020 im 18:17

Konnte Math.floor nicht bei der Rundung helfen? Es rundet ab, und wenn Sie jemals eine Aufrundung verwenden müssen, verwenden Sie Math.ceil. hoffentlich hilft das!

0
MEI 22 Feb. 2020 im 16:11

Es hängt davon ab, mit welchem Datentyp Sie arbeiten möchten, aber dies

should do the trick for you

    public class Rounding {

        public static void main(String[] args) {
             //using string format
            double input = 3.14159265359;
            System.out.println("double : " + input);
            System.out.println("double : " + String.format("%.2f", input));

//using Decimal format
     double num = 1.34567;
        DecimalFormat df = new DecimalFormat("#.###");
        df.setRoundingMode(RoundingMode.CEILING);

        System.out.println(df.format(num));
        }

    }

AUSGABE:
double: 3.14159265359
doppelt: 3,14
doppelt: 3.14

AUSGABE:
1,346

Sie können hier also genauer angeben, welcher Dezimalpunkt zurückgegeben werden soll. Alles hängt von der Wichtigkeit der Dezimalgenauigkeit für Ihr Projekt ab

1
Buchi 22 Feb. 2020 im 16:34