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类型,就实现了对平均数保留两位小数的四舍五入操作。

  1. 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.5Math.round(12.5)会返回13;对于12.49Math.round(12.49)会返回12
    • 局限性

      • 它主要用于简单的取整操作。如果需要精确控制小数位数进行四舍五入,比如保留两位小数,Math.round()本身不能直接满足这个需求。需要结合其他操作,如先将数字乘以相应的倍数(如保留两位小数就乘以100),进行四舍五入后再除以这个倍数,这样操作相对复杂且容易出错。
  2. BigDecimal

    • 引入和用途

      • BigDecimal位于java.math.BigDecimal包中,用于高精度的十进制算术运算。在处理货币、财务数据或者需要精确控制小数位数和舍入方式的数值计算时非常有用,因为浮点数(floatdouble)在计算机内部存储方式的原因,可能会导致精度丢失和不准确的计算结果,而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,结果保留两位小数并四舍五入
      
posted @   1hahahahahahahaha  阅读(28)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示