一、使用DecimalFormat类实现精确的数值取舍
Java中提供了DecimalFormat类来格式化double数值,从而实现对数值的精确取舍。DecimalFormat默认的保留位数是一位,我们可以通过定义pattern来指定需要保留的小数位。例如,下面的代码将保留小数点后两位:
double num = 10.987654; DecimalFormat df = new DecimalFormat("0.00"); String result = df.format(num); System.out.println(result); // 输出:10.99
在这个示例代码中,使用DecimalFormat类来定义了一个格式化的pattern,即"0.00",表示需要保留小数点后两位。然后,使用df.format(num)方法将double类型的数值num格式化成字符串类型的result,即输出的结果。
二、使用BigDecimal类进行数值取舍
Java中提供了BigDecimal类可以实现高精度的数值计算。对于需要进行高精度数值取舍的场景,可以结合使用BigDecimal和RoundingMode类来实现。
举个例子,在计算1.005 * 100时,我们期望得到的结果是100.5,而在使用double类型进行计算时,得到的结果却是100.49999999999999。如果想要得到精确的结果,可以使用BigDecimal来实现:
BigDecimal num1 = new BigDecimal("1.005"); BigDecimal num2 = new BigDecimal("100"); BigDecimal result = num1.multiply(num2).setScale(2, RoundingMode.HALF_UP); System.out.println(result); // 输出:100.51
在这个示例代码中,定义了两个BigDecimal对象,分别表示1.005和100,然后使用multiply()方法来进行乘法计算,得到一个新的BigDecimal对象result。在使用setScale()方法设置保留位数时,需要传入两个参数,第一个参数为保留的小数位数,第二个参数为RoundingMode枚举类型,表示数值的取舍规则。在本例中,我们使用HALF_UP取舍规则进行四舍五入取舍,并保留两位小数。
三、使用Math.round()方法进行取舍
除了使用DecimalFormat和BigDecimal类,我们也可以使用Math类提供的round()方法来进行数值的保留。这个方法可以对一个double类型的数值进行四舍五入的取舍,并返回一个long类型的数值。
double num = 10.987654; long result = Math.round(num * 100); System.out.println(result / 100.0); // 输出:10.99
在这个示例代码中,我们将数值10.987654乘以100,得到一个整数1098。然后使用Math.round()方法对这个整数进行四舍五入的取舍,得到一个新的long类型的整数result,即1099。最后,将result除以100.0,得到一个double类型的数值,即输出的结果10.99。