Java 将整数舍入到小数点后1位?

Java 将整数舍入到小数点后1位?,java,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 ja

因此,在下面的一组代码中,我不明白为什么“%.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)
我也试过数学。四舍五入(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");
    }
}
问题在于:

print.printf(x + " F = " + "%.1f", y + " C");
此方法有两个参数:

  • x+“F=“+”%.1f”
    (格式字符串)
  • y+“C”
    (参数)
压缩第一个参数后,语句变为:

print.printf(x + "F = %.1f", y + "C");
问题:
y+“C”
。为什么?
+
运算符的一个参数是
字符串
;因此,这个
+
变成了一个字符串连接运算符,参数最终将是
string.valueOf(y)+“C”

但是格式字符串中的格式规范是
%.1f
,它需要一个
浮点值
双精度
,或它们的盒装等效值。它不知道如何处理
字符串
参数

因此出现了错误


还有一个问题,你正在做整数除法,但这不是这个问题的主题。如果所有数字问题都已解决,您的打印语句最终将:

print.printf("%.1f F = %.1f C", x, y);

如果要使用
%f

float y = 5 * (x - 32) / 9;
print.printf(x + " F = " + "%.1f", y ).print("C");

你在做整数除法,这是四舍五入。你需要在某处放一个浮子。例如:
float y=5*(x-32)/9f如果使用
int
数据类型存储十进制值。它忽略了小数部分。@Jared这是一个问题,是的,但与主要问题无关(例外)@fge当您将
y
的数据类型更改为
float
@nitish005 nope;即使
y
是一个
float
y+“C”
将是一个
字符串
y
仍将是一个整数值(假设该值可以精确表示为一个float),除非您也将
x
设为一个float。
float y = 5 * (x - 32) / 9;
print.printf(x + " F = " + "%.1f", y ).print("C");