Day42--四舍五入
Day42--四舍五入
使用Math.round()
方法
- 原理及用法:
Math.round()
是 Java 标准库中Math
类提供的一个用于对浮点数进行四舍五入取整的静态方法。它接收一个double
类型的参数,会根据这个参数的小数部分按照四舍五入的规则返回一个最接近的long
类型的整数。例如,如果传入的参数是12.3
,则返回12
;如果传入的参数是12.6
,则返回13
。 - 代码示例:
在你的Student
类中,修改getAverageScore
方法如下:
public double getAverageScore(int[] scores) {
int sum = 0;
for (int i : scores) {
sum += i;
}
double average = (double) sum / scores.length;
// 使用Math.round()进行四舍五入,由于返回值是long类型,需再转换回double类型
average = (double) Math.round(average * 100) / 100;
return average;
}
这里先将平均数average
乘以100
,是为了将需要保留的小数位(这里想要保留两位小数)移动到整数位上,然后使用Math.round()
进行四舍五入取整,得到一个long
类型的结果,再将这个结果除以100
并转换回double
类型,就实现了对平均数保留两位小数的四舍五入操作。
-
Math.round()
方法-
语法和基本用法
-
Math.round()
是java.lang.Math
类中的一个静态方法,用于将一个浮点数进行四舍五入取整。它有两种重载形式:public static long round(double a)
:用于将一个double
类型的浮点数四舍五入转换为long
类型的整数。例如:
double num1 = 12.3; long result1 = Math.round(num1); System.out.println(result1); // 输出为12,因为12.3四舍五入后为12
public static int round(float a)
:用于将一个float
类型的浮点数四舍五入转换为int
类型的整数。例如:
float num2 = 12.7f; int result2 = Math.round(num2); System.out.println(result2); // 输出为13,因为12.7四舍五入后为13
-
-
原理和舍入规则
- 当小数部分大于等于
0.5
时,向上取整;当小数部分小于0.5
时,向下取整。例如,对于12.5
,Math.round(12.5)
会返回13
;对于12.49
,Math.round(12.49)
会返回12
。
- 当小数部分大于等于
-
局限性
- 它主要用于简单的取整操作。如果需要精确控制小数位数进行四舍五入,比如保留两位小数,
Math.round()
本身不能直接满足这个需求。需要结合其他操作,如先将数字乘以相应的倍数(如保留两位小数就乘以100
),进行四舍五入后再除以这个倍数,这样操作相对复杂且容易出错。
- 它主要用于简单的取整操作。如果需要精确控制小数位数进行四舍五入,比如保留两位小数,
-
-
BigDecimal
类-
引入和用途
BigDecimal
位于java.math.BigDecimal
包中,用于高精度的十进制算术运算。在处理货币、财务数据或者需要精确控制小数位数和舍入方式的数值计算时非常有用,因为浮点数(float
和double
)在计算机内部存储方式的原因,可能会导致精度丢失和不准确的计算结果,而BigDecimal
可以避免这些问题。
-
构造方法
-
可以通过多种方式构造
BigDecimal
对象:- 使用
BigDecimal(String val)
构造函数:这是最常用的方式,通过传入一个表示数字的字符串来创建BigDecimal
对象,这样可以确保精确地表示数字。例如:
BigDecimal bd1 = new BigDecimal("12.345");
- 也可以从其他基本数据类型转换而来,但这种方式可能会引入精度问题(不推荐),如
BigDecimal(double val)
构造函数。因为double
类型本身的精度问题,在将double
值转换为BigDecimal
时可能已经丢失了精度。例如:
double num = 12.345; BigDecimal bd2 = new BigDecimal(num); // 可能会出现精度问题,因为num在存储为double时可能已经有精度损失
- 使用
-
-
舍入模式和
setScale
方法BigDecimal
提供了多种舍入模式,这些舍入模式是通过BigDecimal
类中的常量来表示的,如ROUND_UP
(向上舍入)、ROUND_DOWN
(向下舍入)、ROUND_HALF_UP
(四舍五入)等。setScale(int newScale, int roundingMode)
方法用于设置BigDecimal
对象的小数位数(newScale
参数)和舍入模式(roundingMode
参数)。例如:
BigDecimal bd3 = new BigDecimal("12.345"); bd3 = bd3.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println(bd3); // 输出为12.35,将12.345按照四舍五入保留两位小数
-
算术运算方法
BigDecimal
提供了加(add
)、减(subtract
)、乘(multiply
)、除(divide
)等算术运算方法。例如:
BigDecimal num1 = new BigDecimal("2.5"); BigDecimal num2 = new BigDecimal("1.5"); BigDecimal sum = num1.add(num2); System.out.println(sum); // 输出为4.0
- 需要注意的是,在进行除法运算时,如果除不尽可能会抛出
ArithmeticException
异常,所以通常需要指定舍入模式。例如:
BigDecimal dividend = new BigDecimal("10"); BigDecimal divisor = new BigDecimal("3"); BigDecimal quotient = dividend.divide(divisor, 2, BigDecimal.ROUND_HALF_UP); System.out.println(quotient); // 输出为3.33,将10除以3,结果保留两位小数并四舍五入
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步