Java - double*int 算术显示两位小数或几位小数
Java - double*int arithmatic displays with two decimals OR several decimal places
Java 的新手。我正在为一个项目编写一个简单的程序。这是一个允许用户购买披萨的程序。它有一个 运行 总数和最后的订单摘要。我正在使用这些行来保留总计和小计:
switch(mainMenuAnswer) //Switch statement to get correct pricing multiplied by # of desired pizza ordered
{
case 1:
total = total + (pizzaPrices1[otherAnswer - 1] * count);
miniTotal = pizzaPrices1[otherAnswer - 1] * count;
break;
case 2:
total = total + (pizzaPrices2[otherAnswer - 1] * count);
miniTotal = pizzaPrices2[otherAnswer - 1] * count;
break;
case 3:
total = total + (pizzaPrices3[otherAnswer - 1] * count);
miniTotal = pizzaPrices3[otherAnswer - 1] * count;
break;
case 4:
total = total + (pizzaPrices4[otherAnswer - 1] * count);
miniTotal = pizzaPrices4[otherAnswer - 1] * count;
break;
case 5:
total = total + (pizzaPrices5[otherAnswer - 1] * count);
miniTotal = pizzaPrices5[otherAnswer - 1] * count;
break;
}
Total 和 miniTotal 是从 0.0 开始的双精度数,而价格采用 ##.## 格式,后跟计数,这是一个整数值。他们正在成倍增加。
有时我会得到一个很好的答案,例如 $42.35(随机数),但有时我会得到:
How many large pizzas?: 4
---------------------------------------------------------
Your current order total is 1.91
---------------------------------------------------------
Specialty Pizza Menu
1) Meat Lovers
2) BBQ Chicken
3) Hawaiian
4) Chicken-Bacon Ranch
5) Vegetarian
6) Exit Menu
Your choice?: 6
Order Summary:
Type Size Quantity Price
---------------------------------------------------------
Meat Lovers Large 5 .94999999999999
BBQ Chicken Large 4 .96
Order total: 1.91
---------------------------------------------------------
请注意,所有内容都被格式化(以防万一)到小数点后两位,"Price" 正下方的双精度值除外。我也很容易格式化它,但我不知道如何。要格式化的代码行是:
System.out.printf("%-22s %-13s %-11d %-2s \n" , typeArray[i], sizeArray[i], quantityArray[i], priceArray[i]); //Formatting
我尝试使用 %-11.2d
但它给我一个错误。有人知道发生了什么事吗?我假设它与可变双精度和内存位有关,但什么是好的解决方案?
注意:priceArray 是一个字符串数组,格式为 $##.##。
由于价格数组是一个字符串数组,您不能给它数字格式。将其保留为双精度数组,并在末尾使用双精度到 2 位十进制字符串转换。
11.2d的使用是为了双重格式化,而你的数组是一个字符串。您可能想使用某种字符串方法将其格式化为您想要的格式。
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
查找“.”然后再给它加上两个索引,把剩下的剪掉。
Java 的新手。我正在为一个项目编写一个简单的程序。这是一个允许用户购买披萨的程序。它有一个 运行 总数和最后的订单摘要。我正在使用这些行来保留总计和小计:
switch(mainMenuAnswer) //Switch statement to get correct pricing multiplied by # of desired pizza ordered
{
case 1:
total = total + (pizzaPrices1[otherAnswer - 1] * count);
miniTotal = pizzaPrices1[otherAnswer - 1] * count;
break;
case 2:
total = total + (pizzaPrices2[otherAnswer - 1] * count);
miniTotal = pizzaPrices2[otherAnswer - 1] * count;
break;
case 3:
total = total + (pizzaPrices3[otherAnswer - 1] * count);
miniTotal = pizzaPrices3[otherAnswer - 1] * count;
break;
case 4:
total = total + (pizzaPrices4[otherAnswer - 1] * count);
miniTotal = pizzaPrices4[otherAnswer - 1] * count;
break;
case 5:
total = total + (pizzaPrices5[otherAnswer - 1] * count);
miniTotal = pizzaPrices5[otherAnswer - 1] * count;
break;
}
Total 和 miniTotal 是从 0.0 开始的双精度数,而价格采用 ##.## 格式,后跟计数,这是一个整数值。他们正在成倍增加。
有时我会得到一个很好的答案,例如 $42.35(随机数),但有时我会得到:
How many large pizzas?: 4
---------------------------------------------------------
Your current order total is 1.91
---------------------------------------------------------
Specialty Pizza Menu
1) Meat Lovers
2) BBQ Chicken
3) Hawaiian
4) Chicken-Bacon Ranch
5) Vegetarian
6) Exit Menu
Your choice?: 6
Order Summary:
Type Size Quantity Price
---------------------------------------------------------
Meat Lovers Large 5 .94999999999999
BBQ Chicken Large 4 .96
Order total: 1.91
---------------------------------------------------------
请注意,所有内容都被格式化(以防万一)到小数点后两位,"Price" 正下方的双精度值除外。我也很容易格式化它,但我不知道如何。要格式化的代码行是:
System.out.printf("%-22s %-13s %-11d %-2s \n" , typeArray[i], sizeArray[i], quantityArray[i], priceArray[i]); //Formatting
我尝试使用 %-11.2d
但它给我一个错误。有人知道发生了什么事吗?我假设它与可变双精度和内存位有关,但什么是好的解决方案?
注意:priceArray 是一个字符串数组,格式为 $##.##。
由于价格数组是一个字符串数组,您不能给它数字格式。将其保留为双精度数组,并在末尾使用双精度到 2 位十进制字符串转换。
11.2d的使用是为了双重格式化,而你的数组是一个字符串。您可能想使用某种字符串方法将其格式化为您想要的格式。
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
查找“.”然后再给它加上两个索引,把剩下的剪掉。