2016-04-04 11 views
-1

愚かな質問ですが、答えが見つかりません。Javaの基本的な算術およびデータ型

double divider = 1000; 

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

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

1.5 
8.0 

を与え、私は

1.5 
8 

distancedistance2たいロングあり、変更することはできません。 dividerは、どちらの場合も同じである必要があります。

ANWSER:KevinOから

おかげ

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

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

あなたは、出力をフォーマットする必要があります。 – KevinO

+0

キャスティングができない場合など、 'System.out.println(distance2 /(int)divider)'の場合、@KevinOは書式付き出力を行う必要があります。 – Rohan

+0

@KevinOのおかげで、私はそれは私があなたに私が更新の答えを参照してください@TheEwookあなたのより良い例 – TheEwook

答えて

1

は、このようなDecimalFormatを使用してみてください:

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

を行うための最善のことだと思います。 – TheEwook

0

2つのパラメータの一つは、タイプdoubleであるためです。

あなたは単にあなたがやって整数へのキャストを追加することによって達成しようとしているものを達成することができます:それはメモリの一部のみを必要とするSystem.out.println((int) (distance2/divider));

また、あなたはプリミティブを使用する必要があります。 Longlongに置き換えます。ここで

は修正されたコードスニペットです:

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); 
     } 
    } 
} 

は出力:

1.5 
8 
+0

を与えるために質問を更新しました – TheEwook

+0

を与えるために質問を更新しましたより良い例 – user2004685

+0

お返事ありがとう、本当に:)それは実際には動作しますが、それを行う最良の方法ではありません。 KevinOが提案したように出力を再フォーマットすることがベストです – TheEwook

1

あなたはDecimalFormatを使用してそれを行うことができます。

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 

これだけ必要な数字を示しており、末尾のゼロを削除します。

は、ここでそれがどのように見えるかの例です。

new DecimalFormat("###.#")を超えるこの(可能な)利点は、小数点以下1桁に丸めるのではなく、すべて末尾の桁を含むことです。

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

あなたは必要なものを達成するためにDecimalFormatを使用できます。あなたの更新の質問のオフに行く:

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)); 
    } 

が生成されます

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

ありがとう!それは確かにそれを行う方法です:) – TheEwook

+0

@DownVoter、なぜdownvote? – robotlos

0

使用のDecimalFormat私のためにどのような作品

パブリッククラス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)); 
} 

を}

出力

1.5 
8 
関連する問題