所以在下面的一组代码中,我不明白为什么"%。1f"不会将y舍入到1位小数,运行程序时会得到以下结果:
123 F = Exception in thread "main"
java.util.IllegalFormatConversionException: f != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4045)
at java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2761)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2708)
at java.util.Formatter.format(Formatter.java:2488)
at java.io.PrintStream.format(PrintStream.java:970)
at java.io.PrintStream.printf(PrintStream.java:871)
at Check03A.main(Check03A.java:17)
我也试过Math.round(y * 10)/ 10,但它给我的例子是29.0而不是28.9
import java.util.*;
import java.io.*;
import java.lang.*;
import type.lib.*;
public class Check03A
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
PrintStream print = new PrintStream(System.out);
print.println("Enter the temperature in Fahrenheit");
int x = scan.nextInt();
int y = 5 * (x - 32) / 9;
print.printf(x + " F = " + "%.1f", y + " C");
}
}
答案 0 :(得分:2)
问题在于:
print.printf(x + " F = " + "%.1f", y + " C");
此方法有两个参数:
x + " F = " + "%.1f"
(格式字符串),y + "C"
(论证)压缩第一个参数,语句变为:
print.printf(x + "F = %.1f", y + "C");
问题:y + "C"
。为什么?好吧,+
运算符的一个参数是String
;因此,此+
成为字符串连接运算符,参数最终将是String.valueOf(y) + "C"
。
但是格式字符串中的格式规范是%.1f
,它需要float
或double
或它们的盒装等价物。它不知道如何处理String
参数。
因此错误。
还有一个问题是你正在进行整数除法,但这不是这个问题的主题。如果所有数字问题都得到解决,您的打印声明最终将是:
print.printf("%.1f F = %.1f C", x, y);
答案 1 :(得分:0)
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
PrintStream print = new PrintStream(System.out);
print.println("Enter the temperature in Fahrenheit");
int x = scan.nextInt();
//change it
float y = 5 * (x - 32) / 9;
print.printf(x + " F = " + "%.1f", y).print(" C");
}
答案 2 :(得分:0)
如果您想使用y
%f
设为浮动
float y = 5 * (x - 32) / 9;
print.printf(x + " F = " + "%.1f", y ).print("C");