我不确定如何在我的Java代码中正确地舍入它

时间:2015-10-22 14:16:50

标签: java rounding

我是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来解决它,现在它运行得很好。

3 个答案:

答案 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

修改

您甚至可以通过设置DecimalFormatdf.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);
}

为您未来的项目提供最佳服务!