Java初学者写了一段超简单的代码,成功运行。
为了在输出时保留小数位,在第43、48、49行代码改用了printf(); 报错如下。
请问各位,这是为什么?
import java.util.Scanner;
class CashierDest
{
public static void main(String[] args)
{
/* 变量名注释
商品名称 单价 商品数量 商品金额小计 数量总计 金额总计
goodsNname[] goodsPrice[] goodsNum[] goodsMoney[] numSum goodsMoneySum
*/
System.out.println("欢迎使用收银系统");
/*
要实现的收银结果界面
商品 单价 数量 商品金额小计
A
~
F
数量总计:
金额总计:
*/
char []goodsName=new char[]{'A','B','C','D','E','F'}; //声明、创建并赋值含有商品名的char型数组
double[] goodsPrice=new double[6]; //声明并创建含有单价、数量和小计的double型数组
double[] goodsNum=new double[6];
double[] goodsMoney=new double[6];
double goodsNumSum=0; //声明并初始化表示总数和总计的变量
double goodsMoneySum=0;
Scanner in = new Scanner(System.in);
System.out.println("请按顺序输入商品单价和数量,以空格键隔开,最后以Enter键结束"); //提示输入商品单价和数量
for(int i=0;i<6;i++) { //输入商品名称、单价和商品数量,计算商品金额小计、数量总计、金额总计
System.out.println("商品"+goodsName[i]+":");
goodsPrice[i]=in.nextDouble();
goodsNum[i]=in.nextDouble();
goodsMoney[i]=goodsPrice[i]*goodsNum[i];
goodsNumSum+=goodsNum[i];
goodsMoneySum+=goodsMoney[i];
}
System.out.println("");
System.out.println("商品 单价(元) 数量 商品金额小计(元)"); //输出收银结果
for(int i=0;i<6;i++) {
System.out.println();
System.out.printf("%.3lf %.3lf %.3lf %.3lf ",goodsName[i],goodsPrice[i],goodsNum[i],goodsMoney[i]); //模仿C语言的输出方式
//System.out.println(goodsName[i]+" "+goodsPrice[i]+" "+goodsNum[i]+" "+goodsMoney[i]); 无法保留小数点
}
System.out.println("");
System.out.printf("数量总计:%.3lf\n",goodsNumSum);
System.out.printf("金额总计:%.3lf 元",goodsMoneySum);
}
}
运行结果如下:
欢迎使用收银系统
请按顺序输入商品单价和数量,以空格键隔开,最后以Enter键结束
商品A:
4.556 5
商品B:
5 5
商品C:
5 5
商品D:
5 5
商品E:
5 5
商品F:
5 5
商品 单价(元) 数量 商品金额小计(元)
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = 'l'
at java.base/java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2855)
at java.base/java.util.Formatter$FormatSpecifier.(Formatter.java:2891)
at java.base/java.util.Formatter.parse(Formatter.java:2747)
at java.base/java.util.Formatter.format(Formatter.java:2671)
at java.base/java.io.PrintStream.format(PrintStream.java:1209)
at java.base/java.io.PrintStream.printf(PrintStream.java:1105)
at CashierDest.CashierDest.main(CashierDest.java:44)