Double / Floats runden
-
Du kannst die Zahl wohl so angeben aber ob das Sinn macht ist fraglich.
-
Hallo Czengis!
Bei unserer Anwendung macht dies Sinn. Ich habe die Methode eben so umgeschrieben, dass sie auch Zahlen in Exponential-Darstellung schluckt. Dazu wird, wenn ein 'E' gefunden wird einfach dieser Teil abgeschnitten, die Methode dann rekursiv ohne die Exponential-Darstellung aufgerufen und dann der gerundete Wert wieder mit dem Exponenten zurückgegeben. Hier der Code:
public static String toString (double d, int place) { String s= new Double(d).toString(); int e = s.indexOf("E"); if(e != -1) { String exp = s.substring(e, s.length()); s=s.substring(0,e); return toString(new Double(s).doubleValue(), place)+exp; } else { if (place <= 0) return ""+(int)(d+((d > 0)? 0.5 : -0.5)); s = ""; if (d < 0) { s += "-"; d = -d; } d += 0.5*Math.pow(10,-place); if (d > 1) { int i = (int)d; s += i; d -= i; } else s += "0"; if (d > 0) { d += 1.0; String f = ""+(int)(d*Math.pow(10,place)); s += "."+f.substring(1); } return s; } }
Gruss
Carsten
-
Gut, wenns klappt Ihr solltet aber noch darauf achten, dass es keinen Überlauf gibt - bei mir ist aber der 7 Stelle die Zahl total "f#cked up". Das hängt wohl mit der Tatsache zusammen, dass diese Zahl nicht durch 'nen echten Bruch darstellbar ist.
-
Ui, ui
setze 'nen Vierzeiler dagegen:
[java]
public String round(double number, int precision)
{
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(precision);
nf.setMaximumFractionDigits(precision);
return nf.format(number);
}[/code]bis dänn, O'Dog
-
Pah, was der O'Dog kann, kann ich schon lange.
Hier kommt mein Zweizeiler:
public String round(double number, int precision) { BigDecimal bd = new BigDecimal(number); return ("" + bd.setScale(precision, BigDecimal.ROUND_HALF_UP)); }
-
doppelt LOL
jap, dann geht der Punkt wohl an dich,
es sei denn jetzt kommt noch jemand mit'nem EinzeilerO'Dog
-
[java]
public String round(double number, int precision)
{
return ("" + new BigDecimal(number).setScale(precision, BigDecimal.ROUND_HALF_UP));
}[/code]Na gut, der ist unfair, war ja schließlich deine Idee.
O'Dog
-
Heyyyy das könnten wir öfter machen Ich denke da kann man viel lernen
-
Hallo!
Vielen Dank für eure Beiträge. Ich habe mich für O'Dogs 1. Version entschieden und diese erweitert, so dass Zahlen in Exponentialdarstellung richtig verarbeitet werden.
Gruss
Carsten
-
Ich verschiebe diesen Thread in die FAQ.