我是Java的新手,我最近编写了一个代码,用于计算为y商品支付的x金额需要多少更改。效果很好;我唯一的问题是,只要在百分之一的地方没有任何变更(例如:4.60美元),它就会减少到十分位数(4.6美元)。
如果有人知道如何解决这个问题,我将非常感激。我在下面发布了代码。
class Main {
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
double x;
double y;
double z;
System.out.print("Enter the price of the product: $");
x = scan.nextDouble();
System.out.print("Enter what you payed with: $");
y = scan.nextDouble();
z = (int)Math.round(100*(y-x));
System.out.print("Change Owed: $");
System.out.println((z)/100);
int q = (int)(z/25);
int d = (int)((z%25/10));
int n = (int)((z%25%10/5));
int p = (int)(z%25%10%5);
System.out.println("Quarters: " + q);
System.out.println("Dimes: " + d);
System.out.println("Nickels: " + n);
System.out.println("Pennies: " + p);
}
}
编辑:感谢所有回答我问题的人!我最终使用DecimalFormat来解决它,现在它运行得很好。
答案 0 :(得分:2)
此行为是预期的。您不希望数字带有尾随零。
您可以使用DecimalFormat
将它们表示为String
,其尾随零,舍入为两位数。
示例:
DecimalFormat df = new DecimalFormat("#0.00");
double d = 4.7d;
System.out.println(df.format(d));
d = 5.678d;
System.out.println(df.format(d));
输出:
4.70
5.68
您还可以将货币符号添加到DecimalFormat
:
DecimalFormat df = new DecimalFormat("$#0.00");
带货币符号的输出:
$4.70
$5.68
修改强>
您甚至可以通过设置DecimalFormat
到df.setRoundingMode(RoundingMode.UP);
RoundingMode
如何对您的号码进行舍入
答案 1 :(得分:2)
你可以这样打电话:
String.format("%.2f", i);
所以在你的情况下:
...
System.out.print("Change Owed: $");
System.out.println((String.format("%.2f", z)/100));
...
每当您想要将其舍入到某些有效数字时, String.format()
就很有用。在这种情况下" f"代表浮动。
答案 2 :(得分:1)
String.format()方法是我个人的偏好。例如:
float z;
System.out.println(String.format("Change Owed: $%.2f", (float) ((z) / 100)));
%。2f会将任何浮点数('f'代表浮点数)舍入到2位小数,通过更改“f”之前的数字,可以更改要舍入的小数点数。例如:
//3 decimal points
System.out.println(String.format("Change Owed: $%.3f", (float) ((z) / 100)));
//4 decimal points
System.out.println(String.format("Change Owed: $%.4f", (float) ((z) / 100)));
// and so forth...
如果您刚开始使用Java,可能需要阅读String.format()。这是一种非常强大而有用的方法。
据我所知:
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
double x;
double y;
double z;
System.out.print("Enter the price of the product: $");
x = scan.nextDouble();
System.out.print("Enter what you payed with: $");
y = scan.nextDouble();
z = (int) Math.round(100 * (y - x));
System.out.println(String.format("Change Owed: $%.2f", (float) ((z) / 100)));
int q = (int) (z / 25);
int d = (int) ((z % 25 / 10));
int n = (int) ((z % 25 % 10 / 5));
int p = (int) (z % 25 % 10 % 5);
System.out.println("Quarters: " + q);
System.out.println("Dimes: " + d);
System.out.println("Nickels: " + n);
System.out.println("Pennies: " + p);
}
为您未来的项目提供最佳服务!