Auf 2 Nachkommastellen runden

Status
Nicht offen für weitere Antworten.

foobar

Top Contributor
Huhu,

wie kann man mit dem BigDecimal am einfachsten kaufmännisch runden? Ich habe es jetzt so gemacht:
Code:
private BigDecimal round(BigDecimal in)
{
        int len = (in.intValue()+"").length();
        return  in.round(new MathContext(len+ MAX, RoundingMode.HALF_DOWN));
 }
geht das nicht einfacher?

Viele Grüße,
foobar
 
S

SlaterB

Gast
return in.setScale(2 (Nachkommastellen), RoundingMode.HALF_DOWN);
 

foobar

Top Contributor
Danke :)

Macht es eigentlich einen Unterschied, ob man HALF_UP oder HALF_DOWN verwendet? Ich konnte keinen festellen.
 
S

SlaterB

Gast
Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        BigDecimal in = new BigDecimal("0.015");
        System.out.println(in.setScale(2, RoundingMode.HALF_DOWN));
        System.out.println(in.setScale(2, RoundingMode.HALF_UP));
    }
}
 

foobar

Top Contributor
Und warum liefert das hier ein anderes Ergebnis:
Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        BigDecimal in = new BigDecimal(0.015);
        System.out.println(in.setScale(2, RoundingMode.HALF_DOWN));
        System.out.println(in.setScale(2, RoundingMode.HALF_UP));
    }
}

Es scheint wohl einen Unterschied zu machen welchen Konstruktor von BigDecimal man verwendet.
 
S

SlaterB

Gast
jo, BigDecimal(double) ist schon recht böse,
auch wenn ich gerade keinen passenden Link zur Erklärung habe
Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        BigDecimal b = new BigDecimal(0.015);
        System.out.println(b);
    }
}
->
0.01499999999999999944488848768742172978818416595458984375
 

foobar

Top Contributor
SlaterB hat gesagt.:
jo, BigDecimal(double) ist schon recht böse,
auch wenn ich gerade keinen passenden Link zur Erklärung habe

Ich aber:
# The results of this constructor can be somewhat unpredictable. One might assume that writing new BigDecimal(0.1) in Java creates a BigDecimal which is exactly equal to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625. This is because 0.1 cannot be represented exactly as a double (or, for that matter, as a binary fraction of any finite length). Thus, the value that is being passed in to the constructor is not exactly equal to 0.1, appearances notwithstanding.
# The String constructor, on the other hand, is perfectly predictable: writing new BigDecimal("0.1") creates a BigDecimal which is exactly equal to 0.1, as one would expect. Therefore, it is generally recommended that the String constructor be used in preference to this one.
Quelle: http://java.sun.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal(double)

Da muß man erstmal drauf kommen. *g*
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F double auf 2 Nachkommastellen runden Allgemeine Java-Themen 9
Ghostman1711 Pi Nachkommastellen Allgemeine Java-Themen 26
O Prüfen ob String eine Zahl mit maximal 2 Nachkommastellen ist Allgemeine Java-Themen 4
N Zahlen mit Nachkommastellen aus Textfeldern einlesen Allgemeine Java-Themen 6
C double Zahlen mit drei NachkommaStellen in String umwandeln Allgemeine Java-Themen 2
T Nachkommastellen double Allgemeine Java-Themen 18
F Anzahl der nachkommastellen bestimmen nur wie? Allgemeine Java-Themen 10
M Nachkommastellen Allgemeine Java-Themen 7
H Double mit 2 Nachkommastellen speichern. Allgemeine Java-Themen 5
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
S auf nächstes Ganzes runden Allgemeine Java-Themen 5
N Fehler beim Runden?! Allgemeine Java-Themen 4
T individuelles Runden Allgemeine Java-Themen 7
R Runden von Zahlen Allgemeine Java-Themen 3
G Wie kann ich speziell runden ? Allgemeine Java-Themen 6
K Double-Zahl runden Allgemeine Java-Themen 4
T Decimalformat, Fehler beim runden? Allgemeine Java-Themen 8
E double auf int runden, nicht abschneiden Allgemeine Java-Themen 2
H runden Allgemeine Java-Themen 8
T Fließkomma (double) richtig runden Allgemeine Java-Themen 7
N Float zahl auf eine Stelle nach dem Komma runden Allgemeine Java-Themen 3
A Float-Wert auf 2 Stellen nach den Komma runden ? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben