import org.junit.Test; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Formatter; public class test_number { //方法一:BigDecimal @Test public void test(){ double a = 2.5; BigDecimal b 在编程中,我们经常需要对数字进行精确的处理,特别是在涉及到货币、精度要求高的计算或者显示时。保留几位小数是常见的需求,本篇将介绍Java中实现这一功能的五种常见方法。 **方法一:使用BigDecimal** `BigDecimal` 类是Java中用于表示任意精度的十进制数。在`BigDecimal` 中,`setScale()` 方法用于设置小数位数。第一个参数是保留的小数位数,第二个参数是舍入模式,这里使用 `RoundingMode.HALF_UP` 表示四舍五入。例如: ```java double a = 2.5; BigDecimal bd = new BigDecimal(a); bd = bd.setScale(2, RoundingMode.HALF_UP); System.out.println(bd); ``` **方法二:使用DecimalFormat** `DecimalFormat` 是 `NumberFormat` 的子类,用于格式化数字。通过构造函数传入格式字符串,如 `"0.00"` 表示保留两位小数,再通过 `setRoundingMode()` 设置舍入模式。例如: ```java double a = 2.5; DecimalFormat df = new DecimalFormat("0.00"); df.setRoundingMode(RoundingMode.HALF_UP); System.out.println(df.format(a)); ``` **方法三:使用String.format()** `String.format()` 方法提供了一种格式化字符串的方式。`%.2f` 是格式字符串,其中 `%f` 表示浮点数,`.2` 表示保留两位小数。例如: ```java double a = 2.5; System.out.println(String.format("%.2f", a)); ``` **方法四:使用NumberFormat** `NumberFormat` 类提供了一种通用的数字格式化方法。通过 `setMaximumFractionDigits()` 和 `setMinimumFractionDigits()` 分别设置最大和最小的小数位数,然后使用 `format()` 方法进行转换。例如: ```java double a = 1232.5; NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(2); nf.setMinimumFractionDigits(2); nf.setRoundingMode(RoundingMode.HALF_UP); System.out.println(nf.format(a)); // 如果不想显示千位分隔符,可以设置groupingUsed为false nf.setGroupingUsed(false); System.out.println(nf.format(a)); ``` **方法五:使用Formatter** `Formatter` 类也可以用来格式化输出,其使用方式与 `String.format()` 类似,但它是 `java.util.Formatter` 类,而不是 `java.lang.String` 类的方法。例如: ```java double a = 2.5; Formatter formatter = new Formatter(); System.out.println(formatter.format("%.2f", a).toString()); ``` 这五种方法各有特点,可以根据实际需求选择合适的方法来保留或格式化数字的小数位数。在处理高精度计算或者需要控制舍入规则的场景下,`BigDecimal` 是首选;而在简单的输出格式化时,`DecimalFormat` 或 `String.format()` 更加方便。了解并掌握这些方法,能帮助我们在编写Java代码时更加灵活地处理数字格式。















