使用Java中的printf完美格式化 [英] Formatting perfectly with printf in Java
问题描述
我正在尝试让我的程序打印出三个项目的清单,其中包含名称数量和价格。一切正常,我需要的是如何合成价格和总数,以便每次都能排列所有小数,无论数字有多大。这是我的代码
I'm trying to make my program print out a bill of three items with their names quantities and prices. Everything works fine, all I need is how to formate the prices and totals in order to make all the decimals line up everytime, no matter how big the number. Here's my code
import java.util.Scanner;
class AssignmentOneTest {
public static void main(String[] args)
{
Scanner kb = new Scanner(System.in);
// System.out.printf("$%4.2f for each %s ", price, item);
// System.out.printf("\nThe total is: $%4.2f ", total);
//process for item one
System.out.println("Please enter in your first item");
String item = kb.nextLine();
System.out.println("Please enter the quantity for this item");
int quantity = Integer.parseInt(kb.nextLine());
System.out.println("Please enter in the price of your item");
double price = Double.parseDouble(kb.nextLine());
//process for item two
System.out.println("Please enter in your second item");
String item2 = kb.nextLine();
System.out.println("Please enter the quantity for this item");
int quantity2 = Integer.parseInt(kb.nextLine());
System.out.print("Please enter in the price of your item");
double price2 =Double.parseDouble(kb.nextLine());
double total2 = quantity2*price2;
// System.out.printf("$%4.2f for each %s ", price2, item2);
// System.out.printf("\nThe total is: $%4.2f ", total2);
//process for item three
System.out.println("Please enter in your third item");
String item3 = kb.nextLine();
System.out.println("Please enter the quantity for this item");
int quantity3 = Integer.parseInt(kb.nextLine());
System.out.println("Please enter in the price of your item");
double price3 = Double.parseDouble(kb.nextLine());
double total3 = quantity3*price3;
// System.out.printf("$%4.2f for each %s ", price3, item3);
// System.out.printf("\nThe total is: $%4.2f ", total3);
double total = quantity*price;
double grandTotal = total + total2 + total3;
double salesTax = grandTotal*(.0625);
double grandTotalTaxed = grandTotal + salesTax;
String amount = "Quantity";
String amount1 = "Price";
String amount2 = "Total";
String taxSign = "%";
System.out.printf("\nYour bill: ");
System.out.printf("\n\nItem");
System.out.printf("%28s %11s %11s", "Quantity", "Price", "Total");
//complete item one format
System.out.printf("\n%-30s", item);
System.out.printf("%-10d", (int)quantity);
System.out.printf("%-10.2f", (float)price);
System.out.printf(" " + "%-10.2f", (float)total);
//complete item two format
System.out.printf("\n%-30s", item2);
System.out.printf("%-10d", (int)quantity2);
System.out.printf("%-10.2f", (float)price2);
System.out.printf(" " + "%-10.2f", (float)total2);
//complete item three format
System.out.printf("\n%-30s", item3);
System.out.printf("%-10d", (int)quantity3);
System.out.printf("%-10.2f", (float)price3);
System.out.printf(" " + "%-10.2f", (float)total3);
System.out.printf("\n\n\nSubtotal %47.2f", grandTotal);
System.out.printf("\n6.25 %s sales tax %39.2f", taxSign, salesTax);
System.out.printf("\nTotal %50.2f", grandTotalTaxed);
}
问题在于每次价格相同,一切都排好,但我们可以说我输入了50.00的价格和两个不同商品的价格为2.50,那么商品价格和小数点总数并不排列,请帮忙。
The problem is that every time the prices are the same, everything lines up, but lets say I type in a price of 50.00 and a price of 2.50 for two different items, then the items price and total decimal points don't all line up, please help.
推荐答案
我发现,如果我在一对匹配的函数中输出,那么排列标题和列会容易得多对于标题和一个数据,例如:
I find that lining up titles and columns is a lot easier if I do the output in a matched pair of functions, one for the titles and one for the data, e.g.:
public static void prLine (String item, int quantity, double price, double total) {
System.out.printf("\n%-20.20s %10d %10.2f %10.2f", item, quantity,
price, total);
}
public static void prTitles () {
System.out.printf("\n%-20s %10s %10s %10s", "Item", "Quantity",
"Price", "Total");
}
你可以看到很容易让字段宽度很好地对应这个办法。然后我可以使用以下函数:
You can see that it is easy to get the field widths to correspond nicely this way. Then I can use these functions as follows:
prTitles ();
prLine (item,quantity,price,total);
prLine (item2,quantity2,price2,total2);
prLine (item3,quantity3,price3,total3);
...我得到了我认为你正在寻找的风格的排队输出:
... and I get lined-up output in the style I think you're looking for:
Your bill:
Item Quantity Price Total
first 1 1.50 1.50
second 10 12.50 125.00
third 456 322.00 146832.00
将输出代码放入函数中也大大减少了 main()
函数中的代码行。
Putting the output code in functions also greatly reduces the number of lines of code in the main()
function.
这篇关于使用Java中的printf完美格式化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!