作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请帮忙。当扫描仪的提示显示到控制台后,我收到此错误:
Exception in thread "main" java.util.IllegalFormatPrecisionException: 2
at java.util.Formatter$FormatSpecifier.checkInteger(Unknown Source)
at java.util.Formatter$FormatSpecifier.<init>(Unknown Source)
at java.util.Formatter.parse(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.io.PrintStream.format(Unknown Source)
at java.io.PrintStream.printf(Unknown Source)
at Project6.main(Project6.java:56)
问题是出在 printf 上吗?我检查了格式,看起来是正确的。
程序如下:
import javax.swing.JOptionPane; // allows for message dialog
import java.util.Scanner; // allows for Scanner object to be used
import java.text.DecimalFormat; // allows for formatting numbers
public class Project6 {
public static void main (String[] args) {
final double LUXURYRATE = .2; // rate of luxury tax
final double STATERATE = .1; // rate of state tax
final double LABORRATE = .05; // rate of labor cost
double diamondCost; // cost of diamond, value comes from the Scanner
double settingCost; // cost of setting, value comes from the Scanner
int numOrdered; // quantity ordered, value comes from the Scanner
double baseCost ; //sum of the values in the variables for diamond and setting
double totalCost; // total cost including tax
double laborCost; // cost of labor
double stateTax; // cost of state tax
double luxuryTax; // cost of luxury tax
double finalAmountDue; // total cost times quantity ordered
DecimalFormat formatter = new DecimalFormat("$#,##0.00"); // money format
Scanner input = new Scanner (System.in); // creates Scanner object
System.out.print("Enter diamond cost:"); // prompts user
diamondCost = input.nextDouble(); // converts input to double
System.out.print("Enter setting cost:"); // prompts user
settingCost = input.nextDouble(); // converts input to double
System.out.print("Enter quantity:"); // prompts user
numOrdered = input.nextInt(); // converts input to integer
baseCost = diamondCost + settingCost; // calculates the cost before multiplication
laborCost = calcExtraCost(LABORRATE , baseCost); // calls method calcExtraCost for calculation
stateTax = calcExtraCost(STATERATE, baseCost); // calls method calcExtraCost for calculation
luxuryTax = calcExtraCost(LUXURYRATE, baseCost); // calls method calcExtraCost for calculation
totalCost = baseCost + laborCost + stateTax + luxuryTax; // total cost including tax and labor costs
finalAmountDue = totalCost * numOrdered; // calculates total
System.out.printf("Diamond Cost: $%,.2d \n", diamondCost); // displays bill to console
System.out.printf("Setting Cost: $%,.2f \n", settingCost);
System.out.printf("State Tax @ 10%: $%,.2f \n", stateTax);
System.out.printf("Luxury Tax @ 20%: $%,.2f \n", luxuryTax);
System.out.printf("Labor Charge @ $5% %,.2f \n", laborCost);
System.out.printf("Total Price: $%,.2f \n" , totalCost);
System.out.printf("Number Ordered: $%,.2d \n", numOrdered);
System.out.printf("Amount Due: $%,.2f \n", finalAmountDue);
JOptionPane.showMessageDialog(null, "Diamond Cost: " + formatter.format(diamondCost) + "\n" +
"Setting Cost: " + formatter.format(settingCost) + "\n" +
"State Tax @ 10%: " + formatter.format(stateTax) + "\n" +
"Luxury Tax @ 20%: " + formatter.format(luxuryTax) + "\n" +
"Labor Charge @ 5% " + formatter.format(laborCost) + "\n" +
"Total Price: " + formatter.format(totalCost) + "\n" +
"Number Ordered: " + formatter.format(numOrdered) + "\n" +
"Amount Due: " + formatter.format(finalAmountDue) ); // displays bill in message dialog
} // end method main
public static double calcExtraCost (double RATE, double bcost) {
double cost = RATE * bcost; // calculates extra cost
return cost; // returns value of extra cost
} // end method calcExtraCost
} // end class Project6
最佳答案
答:因为您的格式说明符与 printf
方法中使用的输入参数不匹配。
使用 %f
而不是 %d
作为 double
值的格式说明符
System.out.printf("Diamond Cost: $%,.2f \n", diamondCost);
^
此外 %
需要额外的 %
来转义该字符
System.out.printf("State Tax @ 10%%: $%,.2f \n", stateTax);
最后,删除不必要的点字符
System.out.printf("Number Ordered: $%,.2d \n", numOrdered);
^
关于java - 为什么我会遇到异常(exception)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775242/
我是一名优秀的程序员,十分优秀!