Java 中浮点数的四舍五入

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

对数字进行四舍五入意味着获取它的近似值。在 Java 中,有几种方法可以对浮点数进行四舍五入。在本实验中,我们将学习如何使用 Java 中的不同方法对数字进行四舍五入。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/SystemandDataProcessingGroup(["`System and Data Processing`"]) java/BasicSyntaxGroup -.-> java/output("`Output`") java/BasicSyntaxGroup -.-> java/math("`Math`") java/ProgrammingTechniquesGroup -.-> java/method_overloading("`Method Overloading`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/format("`Format`") java/SystemandDataProcessingGroup -.-> java/math_methods("`Math Methods`") java/SystemandDataProcessingGroup -.-> java/system_methods("`System Methods`") subgraph Lab Skills java/output -.-> lab-117452{{"`Java 中浮点数的四舍五入`"}} java/math -.-> lab-117452{{"`Java 中浮点数的四舍五入`"}} java/method_overloading -.-> lab-117452{{"`Java 中浮点数的四舍五入`"}} java/format -.-> lab-117452{{"`Java 中浮点数的四舍五入`"}} java/math_methods -.-> lab-117452{{"`Java 中浮点数的四舍五入`"}} java/system_methods -.-> lab-117452{{"`Java 中浮点数的四舍五入`"}} end

使用 printf() 方法进行四舍五入

我们可以使用 System.out.printf() 方法将四舍五入后的数字打印到控制台。通过精度修饰符,我们可以指定要保留的小数位数。

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.printf("Pi: %.2f %n", pi); // 打印 Pi: 3.14
  System.out.printf("One Third: %.3f %n", oneThird); // 打印 One Third: 0.333
  System.out.printf("Gravitation Acceleration(g): %.0f", g); // 打印 Gravitation Acceleration(g): 10
}

要运行代码,请打开终端并进入代码文件所在的目录。然后,使用 javac filename.java 编译代码。之后,使用 java filename 运行它。

使用 DecimalFormat() 方法进行四舍五入

我们可以使用 DecimalFormat 类来指定数字的格式化模式。通过井号(#)可以指定小数位数,然后使用 format() 方法对数字进行四舍五入。

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  DecimalFormat d1 = new DecimalFormat("#.##");
  DecimalFormat d2 = new DecimalFormat("#.###");
  DecimalFormat d3 = new DecimalFormat("#");

  System.out.println("Pi: " + d1.format(pi)); // 打印 Pi: 3.14
  System.out.println("One Third: " + d2.format(oneThird)); // 打印 One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + d3.format(g)); // 打印 Gravitation Acceleration(g): 10
}

要运行代码,请打开终端并进入代码文件所在的目录。然后,使用 javac filename.java 编译代码。之后,使用 java filename 运行它。

使用 Math.round() 方法进行四舍五入

我们可以使用 Math.round() 来对小数进行四舍五入。当我们需要将数字四舍五入到零位小数时,可以使用此方法。

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.println("Pi: " + Math.round(pi)); // 打印 Pi: 3
  System.out.println("One Third: " + Math.round(oneThird)); // 打印 One Third: 0
  System.out.println("Gravitation Acceleration(g):" + Math.round(g)); // 打印 Gravitation Acceleration(g): 10
}

要运行代码,请打开终端并进入代码文件所在的目录。然后,使用 javac filename.java 编译代码。之后,使用 java filename 运行它。

创建自定义四舍五入方法

如果我们需要将小数四舍五入到多于零位小数,可以创建自己的方法来实现。以下方法接受一个小数值和要保留的小数位数作为参数,并返回四舍五入后的结果。

public static double round(double num, int places) {
  double scale = Math.pow(10, places);
  double roundedNum = Math.round(num * scale) / scale;
  return roundedNum;
}

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.println("Pi: " + round(pi, 2)); // 打印 Pi: 3.14
  System.out.println("One Third: " + round(oneThird, 3)); // 打印 One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + round(g, 0)); // 打印 Gravitation Acceleration(g): 10.0
}

要运行代码,请打开终端并进入代码文件所在的目录。然后,使用 javac filename.java 编译代码。之后,使用 java filename 运行它。

使用 BigDecimal 进行四舍五入

我们可以使用 BigDecimal 类的 round() 方法对数字进行四舍五入。以下代码展示了如何使用 BigDecimal 类的 round() 方法对小数进行四舍五入。

public static void main(String args[]) {
  BigDecimal pi = new BigDecimal("3.14159265359");
  pi = pi.setScale(4, RoundingMode.HALF_UP); // 四舍五入到 4 位小数

  System.out.println("Pi: " + pi); // 打印 Pi: 3.1416
}

要运行代码,请打开终端并进入代码文件所在的目录。然后,使用 javac filename.java 编译代码。之后,使用 java filename 运行它。

使用 BigDecimal 对非 BigDecimal 数字进行四舍五入

如果数字不是 BigDecimal 类型,我们可以先将其转换,然后使用 BigDecimal 类进行四舍五入。以下方法可用于对 double 数据类型的数字进行四舍五入。

public static double round(double num, int places) {
  BigDecimal b = new BigDecimal(Double.toString(num));
  b = b.setScale(places, RoundingMode.HALF_UP);
  return b.doubleValue();
}

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  double g = 9.807f;

  pi = round(pi, 4);
  oneThird = round(oneThird, 3);
  g = round(g, 0);

  System.out.println("Pi: " +pi); // 打印 Pi: 3.1416
  System.out.println("One Third: " + oneThird); // 打印 One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + g); // 打印 Gravitation Acceleration(g): 10.0
}

要运行代码,请打开终端并进入代码文件所在的目录。然后,使用 javac filename.java 编译代码。之后,使用 java filename 运行它。

总结

在本实验中,我们学习了在 Java 中对小数进行四舍五入的不同方法。我们使用 printf()DecimalFormat() 进行简单的四舍五入,使用 Math.round() 将数字四舍五入到零位小数,使用 BigDecimal 进行精确的四舍五入,以及使用 DoubleRounder 通过 decimal4j 库进行四舍五入。我们还创建了一个自定义方法,可以将任何小数四舍五入到任意小数位数。

您可能感兴趣的其他 Java 教程