指定されたシリーズをJavaで生成するにはどうすればよいですか
JDK1.0
JDK1.1
JDK1.2
JDK1.3
JDK1.4
JDK1.5
JDK1.6
for ループで浮動変数を使用しましたが、エラーが発生します。
for(float f=1.0;f<1.7;f=f+0.1)
System.out.println("JDK"+f);
for(int i = 0; i < 7; i++){
System.out.println("JDK 1." + i);
}
これで問題が解決すると思います
for(float f=1.0; f<1.7; f=f+0.1)
System.out.println("JDK"+f);
に変更する必要があります
for(float f=1.0F; f<1.7; f=f+0.1F)
System.out.println("JDK"+f);
または、ダブルを使用します
for(double f=1.0; f<1.7; f=f+0.1)
System.out.println("JDK"+f);
浮動小数点演算に関連する精度の低下が目立たないため、double を使用する方が適切です。たとえば、最初の可能な修正出力は次のとおりです。
JDK1.0
JDK1.1
JDK1.2
JDK1.3000001
JDK1.4000001
JDK1.5000001
JDK1.6000001
2 番目の修正の出力:
JDK1.0
JDK1.1000000014901161
JDK1.2000000029802322
JDK1.3000000044703484
JDK1.4000000059604645
JDK1.5000000074505806
JDK1.6000000089406967
この問題を解決するには、次のように 2 番目の修正を変更します。
for(double f=1.0; f<1.7; f=f+0.1)
System.out.printf("JDK%.1f\n", f);
少なくとも2つの問題があります...
1 つ目は、Java がすべての 10 進数が であると想定していることですdouble
。これは、float 割り当てを使用しようとすることを意味します。Java は、変換により精度が失われる可能性があることを警告しようとします。
a of を使用してdouble
、値を a として扱いたいことをコンパイラに伝えることで、float
これを克服できます。f
例えば...
for(float f=1.0f;f<1.7f;f+=0.1f) {
System.out.println("JDK"+f);
}
次に直面する問題は、印刷された数字が要件を満たしていないという事実です0.4
。0.4
この場合、NumberFormat
何らかの種類の を使用して、数値を希望どおりにフォーマットする必要があります。
例えば...
NumberFormat nf = NumberFormat.getNumberInstance();
for(float f=1.0f;f<1.7f;f+=0.1f) {
System.out.println("JDK"+nf.format(f));
}
...そしてなぜそうしないのか
for(int f=0;f<7;f++)
System.out.println("JDK1."+f);
また、次の理由でコンパイルの問題が発生していました。
float f = 1.0; // Compilation error
0.1 はデフォルトで double です。次のようにする必要があります。
float f = 1.0f;
これらのコードセグメントを使用できます
for(int f=0;f<7;f=f+1)
System.out.println("JDK 1."+f);
これを試して:
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("#.##");
for (double f = 1.0; f < 1.7; f = f + 0.1) {
System.out.println("JDK" + df.format(f));
}
}
float は使用できませんが、このように double を使用できます
1.7 未満になる場合は、
for(int f = 1; f < 7; f++){
System.out.println("JDK1." + f);
}
for(double i=1.0;i<=1.7;i=i+0.1){
BigDecimal bd = new BigDecimal(i);
System.out.println("JDK"+bd.setScale(1,1));
}