我遇到printf问题。我想打印出两个精确的双精度数组,并将小数位数限制为一个,但我收到一个错误。 第一个阵列将以摄氏温度打印,第二个阵列将获得这些值并将其更改为Farenheit,它也将打印到屏幕上。我正在尝试在打印数字时实现printf方法。我能想到的唯一问题是我在数组中引用了一个索引值而实际上并不是一个双倍的。
import java.util.Scanner;
public class tempOne {
public static void main (String [] args){
Scanner sc = new Scanner(System.in);
double [] temp1 = new double [10];
double [] temp2 = new double[10];
System.out.println("Please enter 10 temperatures in Celsius: ");
for (int index = 0; index<temp1.length;index++)//Gets temperatures in Celsius.
{
temp1[index]=sc.nextDouble();
}
for (int index = 0; index<temp1.length;index++)//Prints temperatures in Celsius.
{
System.out.printf("Temperatures in Celsius: %.1f", temp1[index] + " ");
}
for (int index = 0; index<temp1.length;index++)//Copies array 1 into array 2.
{
temp2[index]=temp1[index];
}
System.out.println("");
for (int index = 0; index<temp1.length;index++)//Changes values in array 2 to Farenheit.
{
temp2[index] = ((temp1[index]*9/5)+32);
}
for (int index = 0; index<temp1.length;index++)
{
System.out.printf("Temperatures in Farenheit: %.1f", temp2[index] + " ");//Prints array 2.
}
}
}
结果如下:
Please enter 10 temperatures in Celsius:
20.22
Temperatures in Celsius: Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302)
at java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2806)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2753)
at java.util.Formatter.format(Formatter.java:2520)
at java.io.PrintStream.format(PrintStream.java:970)
at java.io.PrintStream.printf(PrintStream.java:871)
at tempOne.main(tempOne.java:16)
任何人都对这里发生的事情有任何想法?
答案 0 :(得分:2)
删除+ " "
。
printf
%.1f
表示“打印带有一个小数位的浮点值”,但使用+ " "
表示您将该数字转换为String
。
答案 1 :(得分:2)
您希望格式化double,而是传递String参数。尝试(删除+ ""
):
System.out.printf("Temperatures in Farenheit: %.1f", temp2[index])