将int舍入到1位小数?

时间:2014-11-19 05:00:03

标签: java

所以在下面的一组代码中,我不明白为什么"%。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");
    }
}

3 个答案:

答案 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,它需要floatdouble或它们的盒装等价物。它不知道如何处理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");