Java 中的两位小数

17 Mar 2025 | 4 分钟阅读

在 Java 中,当我们使用 double 数据类型声明变量时,它表示小数点后 15 位数字。但有时我们只需要小数点后两位,例如表示货币和其他单位。因此,在本节中,我们将通过适当的示例和 Java 程序来讨论**显示 double 类型至两位小数的方法**。

Two Decimal Places Java

Java 提供了以下三种方法来显示 double 类型至两位小数:

  1. 使用 DecimalFormat ("0.00")
  2. 使用 String.format() 方法 ("%.2f")
  3. 使用 BigDecimal

让我们逐一讨论以上方法。

使用 DecimalFormat

Java 的 **DecimalFormat** 是 NumberFormat 类的具体子类,用于格式化十进制数。该类提供了 **setRoundingMode()** 方法来显示 double 数至两位小数。

语法

它接受舍入模式作为参数,并覆盖 **NumberFormat** 类的 setRoundingMode() 方法。如果我们不指定任何 roundingMode,它会抛出 **NullPointerException**。下表描述了不同的舍入模式。

向上舍入UP向下舍入CEILINGFLOOR四舍五入(向上)四舍五入(向下)银行家舍入法必需
5.56565656抛出 ArithmeticException
2.53232322抛出 ArithmeticException
1.62121222抛出 ArithmeticException
1.12121111抛出 ArithmeticException
1.011111111
-1.0-1-1-1-1-1-1-1-1
-1.1-2-1-1-2-1-1-1抛出 ArithmeticException
-1.6-2-1-1-2-2-2-2抛出 ArithmeticException
-2.5-3-2-2-3-3-2-2抛出 ArithmeticException
-5.5-6-5-5-6-6-5-6抛出 ArithmeticException

我们还使用了 DecimalFormat 类的另一个方法,即 **format()** 方法。它将数字格式化为字符串。

语法

该方法接受三个参数:number、result 和 position。但后两个参数是可选的。它返回格式化后的数字字符串。如果 **RoundingMode** 设置为 **UNNECESSARY**,该方法会抛出 **ArithmeticException**。

TwoDecimalPlace1.java

输出

Double Number: 123.9876543567
Double Number: 123.99

Before Rounding: 123.98
After Rounding Up: 123.99

使用 String.format() 方法

Java 还提供了 format() 方法来格式化数字。它属于 String 类。通过使用该方法,可以相应地格式化任何数字和字符串。

为了将数字修改为小数点后两位,我们使用 **%.2f** 来格式化数字。请注意,我们无法在 String.format() 方法中进行舍入,它总是进行四舍五入(向上)。

语法

该方法接受以下两个参数:

format: 这是我们想要的格式化字符串。

args: 这些是由格式字符串中的格式说明符引用的参数。

它返回格式化后的字符串。如果格式字符串包含非法语法,则会抛出 **IllegalFormatException**。如果我们将格式指定为 null,它也会抛出 **NullPointerException**。

TwoDecimalPlace2.java

输出

Double Number: 10.98765432167
Double Number: 10.99
Double Number: 10.99

使用 BigDecimal

我们还可以使用 Java BigDecimal 类来显示小数点后两位。它属于 **java.math.BigDecimal** 包。它扩展了 Number 类并实现了 **Comparable<BigDecimal>** 接口。

该类提供了 setScale() 方法。语法如下:

语法

该方法接受两个参数:

newScale: 要返回的 BigDecimal 值的标度。

roundingMode: 我们想要应用的舍入模式。

它返回一个 BigDecimal,其标度为指定值,其非标度值通过乘以或除以适当的十的幂来确定,以维持其总体值。

如果 **RoundingMode** 设置为 **UNNECESSARY**,该方法会抛出 **ArithmeticException**。RoundingMode 是一个枚举,提供了上面讨论的 RoundingMode。

我们在该程序中使用的另一个方法是 **BigDecimal.doubleValue()**。它将 BigDecimal 转换为 **double** 数字。让我们看一个例子。

TwoDecimalPlace3.java

输出

Double Number: 12.4565652239
Up to two decimal places: 12.46

下一个主题Eclipse 更改主题