2016-04-04 12 views
-1

Dumme Frage, aber kann die Antwort nicht finden.Java Grundrechenart und Datentyp

double divider = 1000; 

    List<Long> listLong = new ArrayList<>(); 
    listLong.add(1500L); 
    listLong.add(8000L); 

    for (Long val : listLong) 
    { 
     System.out.println((val/ divider)); 
    } 

Gibt mir

1.5 
8.0 

und ich möchte

1.5 
8 

distance und distance2 sind Lange und kann nicht verändert werden. divider muss in beiden Fällen dasselbe sein.

anwser:

Dank KevinO

DecimalFormat df = new DecimalFormat("#.##"); 

    for (Long val : listLong) 
    { 
     System.out.println(df.format(val/ divider)); 
    } 
+2

Sie müssen die Ausgabe zu formatieren. – KevinO

+0

Wenn Sie kein Gießen können, z. 'System.out.println (distance2/(int) divider)', dann müssen Sie eine formatierte Ausgabe machen, wie @KevinO sagt. – Rohan

+0

@KevinO Danke Ich denke, es ist das beste, was zu tun ist – TheEwook

Antwort

1

Try DecimalFormat wie folgt zu verwenden:

DecimalFormat df = new DecimalFormat("###.#"); 
    System.out.println(df.format(distance2/divider)); 
+0

Ich habe die Frage aktualisiert, um Ihnen ein besseres Beispiel zu geben – TheEwook

0

Dies liegt daran, eine der beiden Parameter des Typs sind double .

Sie können einfach erreichen, was Sie, indem Sie durch das Hinzufügen einer Umwandlung in Ganzzahl zu erreichen versuchen: System.out.println((int) (distance2/divider));

Außerdem sollten Sie Primitive verwenden, da es nur einen Bruchteil des Speichers erfordert. Ersetzen Sie durch long. Hier

ist die korrigierte Codeausschnitt:

public static void main (String[] args) throws Exception 
{ 
    List<Long> listLong = new ArrayList<>(); 
    listLong.add(1500L); 
    listLong.add(8000L); 
    double divider = 1000; 

    for (long val : listLong) 
    { 
     int calc = (int)(val/divider); 
     if((val/divider - calc) == 0) { 
      System.out.println(calc); 
     } else { 
      System.out.println(val/divider); 
     } 
    } 
} 

Ausgang:

1.5 
8 
+0

Ich habe die Frage aktualisiert, um Ihnen ein besseres Beispiel zu geben – TheEwook

+0

@TheEwook Siehe die aktualisierte Antwort. – user2004685

+0

Danke für deine Antwort, wirklich :) es funktioniert zwar, aber es ist nicht der beste Weg, es zu tun. Neuformatierung der Ausgabe ist das Beste, was zu tun ist, wie KevinO vorgeschlagen – TheEwook

1

Sie können dies tun, indem ein DecimalFormat verwenden.

Hier ist ein Beispiel dafür, was das aussehen würde:

DecimalFormat df = new DecimalFormat("0"); 
df.setMaximumFractionDigits(100); 

System.out.println(df.format(1500L/1000D)); //Output: 1.5 
System.out.println(df.format(8000L/1000D)); //Output: 8 
System.out.println(df.format(1234L/1000D)); //Output: 1.234 

Dies ist nur die notwendigen Ziffern zeigt, und entfernt nachfolgende Nullen.

Der (mögliche) Vorteil von diesem über new DecimalFormat("###.#") ist, dass es alle die abschließenden Ziffern enthält, anstatt auf 1 Dezimalstelle zu runden.

DecimalFormat df = new DecimalFormat("###.#"); 

System.out.println(df.format(1500L/1000D)); //Output: 1.5 
System.out.println(df.format(8000L/1000D)); //Output: 8 
System.out.println(df.format(1234L/1000D)); //Output: 1.2 
1

können Sie DecimalFormat verwenden, um zu erreichen, was Sie brauchen.Abgehend Ihrer aktualisierten Frage:

double divider = 1000; 

    List<Long> listLong = new ArrayList<>(); 
    listLong.add(1500L); 
    listLong.add(8000L); 
    DecimalFormat df = new DecimalFormat("###.#"); 

    for (Long val : listLong) { 
     System.out.println(df.format(val/divider)); 
    } 

Produziert:

run: 
1.5 
8 
BUILD SUCCESSFUL (total time: 0 seconds) 
+0

Danke! Das ist der Weg, es in der Tat zu tun :) – TheEwook

+0

@DownVoter, warum der Downvote? – robotlos

0

Verwendung DecimalFormat

was für mich:

public class NewClass {

public static void main(String[] args) { 
    DecimalFormat dcf= new DecimalFormat("#.#"); 
    Long distance = 1500L; 
    Long distance2 = 8000L; 
    double divider = 1000; 

    System.out.println(dcf.format(distance/divider)); 
    System.out.println(dcf.format(distance2/divider)); 
} 

}

Ausgang

1.5 
8