[英]Rounding int to 1 decimal place?
因此,在以下代碼集中,我不明白為什么“%.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");
}
}
問題在這里:
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);
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");
}
如果要使用%f
請將y
為float
float y = 5 * (x - 32) / 9;
print.printf(x + " F = " + "%.1f", y ).print("C");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.