2010-11-18 10 views
0

Hey Leute, ich versuche, auf 3 Dezimalstellen zu runden.Ein Doppel runden

Ich habe den folgenden Code verwendet.

this.hours = Round(hours + (mins/60), 3); 

Aber es funktioniert nicht. Wo bin ich falsch gelaufen? Dank

+0

Welches Ergebnis erhalten Sie? Welche Arten sind "Stunden" und "Minuten" und "diese.Stunden"? – pinkfloydx33

+0

Stunden und/oder Minuten müssen doppelt sein. Sind sie ? –

+0

Was ist Round()? – EJP

Antwort

5

können Sie diese Funktion verwenden:

public static double Round(double number, int decimals) 
    { 
    double mod = Math.pow(10.0, decimals); 
    return Math.round(number * mod)/mod; 
    } 
+0

Nein, du kannst nicht. Siehe meine Antwort. – EJP

+1

verstehst du nicht zu beantworten, und die Funktion von oben funktioniert für Themenstarter, so dass ich Ihren Punkt nicht bekommen ... – Michel

+0

ist es nicht ein wenig dumm, dass Sie mir einen Downvote geben, wenn die Antwort für den Starter nützlich ist ? – Michel

2

Erste Sache ist, dass alle Variablen sind int so das Ergebnis Ihrer Abteilung ist auch eine int, also nichts zu Round.

Dann nehmen Sie einen Blick auf: How to round a number to n decimal places in Java

+0

Wie können Sie sehen, dass Doppel-und Minuten int sind? – Michel

+0

Es ist mehr eine Intuition. Die Variablennamen zeigen auf ganzzahlige Werte (Stunde und Minute) und es ist auch ein häufiger Fehler zu denken, dass eine Division doppelt zurückgibt. –

0

wenn mins eine ganze Zahl Sie durch 60.0 zu teilen haben eine schwimmende Zahl zu erhalten, die Sie

abrunden können
2

Wenn mins eine Ganzzahl ist, dann führt mins/60 zu einer ganzzahligen Division, die immer zu 0 führt.

Versuchen Sie, von 60 zu 60.0 zu wechseln, um sicherzustellen, dass die Division als Gleitkommadivision behandelt wird.

Beispiel:

int hours = 5; 
int mins = 7; 

// This gives 5.0 
System.out.println(Math.round(1000 * (hours + (mins/60 )))/1000.0); 

// While this gives the correct value 5.117.   (.0 was added) 
System.out.println(Math.round(1000 * (hours + (mins/60.0)))/1000.0); 
0

Versuchen Sie es mit wie folgt

this.hours = Round(hours + (((double)mins)/60), 3); 
-1

Sie können nicht. Doppelpunkte haben keine Dezimalstellen, da sie binär und nicht dezimal sind. Sie können es in etwas umwandeln, das Dezimalstellen aufweist, d. H. Eine Basis-Zehn-Nummer, z. BigDecimal, und passen Sie die Genauigkeit an, oder Sie können es für die Ausgabe mit den Funktionen von java.text, z. DecimalFormat oder die entsprechende System.out.printf() - Zeichenfolge.

+0

Ist es nicht offensichtlich, dass das OP nur von etwas wie "1.333333333" zu "1.333" gehen will? – aioobe

+0

Ja, und ein Base-2-Double kann keinen dieser Werte halten. – EJP

+0

@ downvoter Bitte erklären, und bitte [hier] (http://StackOverflow.com/a/12684082/207421) für den Nachweis. – EJP