Math类的使用

Math 类

常用方法

Math

java .lang .math类,封装了很多与数学相关的属性和方法。使用它可以再一定程度上避免程序员自行研发数学方面

常用方法

常量

1.static double E 
比任何其他值都接近的e(自然对数的底数)的double值
2.static double PI 
比任何其他值都更接近pi(圆的周长与直径之比)的double值

方法

1. static 数据类型 abs(数据类型 参数) 
返回参数对应数据类型的绝对值数据类型有int ,float,double,long

2.static double random()
生成[0,1)之间的随机小数,想要生成a-b之间的数,用返回值*b+a  
即:random()*b + a;
3.static double ceil(double d);
向上取整,无论小数点后面是否满足四舍五入的条件都要向前进一位。负数向0取整。

4. static double floor(double d);
向下取整,无论小数点后面是否满足四舍五入的条件,小数点后面的数都舍弃。
负数想更小的值向下取整。
5. static long round(double d);
四舍五入,返回接近参数的long值
6. static int round(float a);
四舍五入,返回接近参数的int值
7. static double pow(double a, double b):
求a 的 b 次幂,不精确。
public static double pow(double a, double b){
	return StrictMath.pow(a,b);
}
底层源码:public static native double pow(double a, double b);
8.double sqrt(double a):开平方
System.out.println(Math.sqrt(4));//2.0
9.double cbrt(double a):开立方
System.out.println(Math.cbrt(27));//3.0

BigDecimal类 解决小数计算不精确问题

不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。

构造方法

BigDecimal的构造方法有很多,此处只写常用的。
常用:
推荐使用 BigDecimal(String val);精度精确,double类型的形参会导致更加不精确

  • BigDecimal(String val)
    将 BigDecimal 的字符串表示形式转换为 BigDecimal。

不推荐:

  • BigDecimal(double val)
    将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式。

常用方法

  • 1.BigDecimal add(BigDecimal augend) ; 加法
    返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。

  • 2.BigDecimal subtract(BigDecimal b) 减法

  • 3.BigDecimal multiply(BigDecimal b) 乘法

  • 4.BigDecimal divide(BigDecimal b) 除法,除不尽的时候会报算术异常。ArithmeticException

  • 5.解决方案是:使用重载的divide()方法。
    BigDecimal divide(BigDecimal b, int scale, BigDecimal ROUNDE_HALF_UP);第一个参数是除数,第二个参数是保留小数位数,第三个参数是舍入模式

package JAVA_API.num6_Math;

/**
 * java.lang.Math类,封装了很多与数学相关的属性和方法,使用它可以在一定程度避免程序员自行研发数学方面的代码
 * 都是静态常量和静态方法。方便直接调用类名.调用
 *
 * Math中的静态常量:圆周率 PI  科学计数法:E
 * Math中的静态方法:
 * 1.求绝对值: static int abs(int a); 返回一个int型参数的绝对值
 * 2.求最大值或最小值: static int max(int a,int b); / static int min(int a,int b);
 * 求两个数中的最大值和最小值,只能比较两个数之间大小,多了不好使,仅限类型int,long double ,float
 * 3.生成随机数:static double random(); 返回一个带正号的double值,该值在[0.0 - 1.0)之间的随机小数,若要生成[a,b)之间的数,则用返回值*b+a:ramdom()*b + a;
 * 4.向上取整:static double ceil(double d)向上取整,无论小数点后面是否满足四舍五入的条件都要向前进一位。负数向0取整。
 * 5. 向下取整 double floor(double d) ,向下取整 ,无论小数点后面是否满足四舍五入的条件,小数点后面的数都舍弃。
 * 负数想更小的值向下取整。
 * 6.static long round(double d);四舍五入,返回接近参数的long值
 * 7.static double pow(double a, double b); 求 a 的 b次幂
 * 8.static double sqrt(double a):开平方
 * 9.static double cbrt(double a);开立方
 * @author yyc
 * 2021/9/14 9:25
 */
public class MathDemo1 {
    public static void main(String[] args) {
        //Math中的静态常量
        //PI
        System.out.println(Math.PI);
        //科学计数法
        System.out.println(Math.E);
        //Math中的静态方法
        /*求绝对值
        * 1. static int abs(int a); 返回一个int型参数的绝对值
        * */
        System.out.println(Math.abs(-1));//1
        System.out.println(Math.abs(-1.9));//1.9
        /*
        * 2.static int max(int a,int b)/ static int min(int a,int b):求两个数中的最大值和最小值,
        * 只能比较两个数之间大小,多了不好使,仅限类型int,long double ,float
        * */
        System.out.println(Math.max(2,3));
        System.out.println(Math.max(-1.2, 0.3));//0.3
        /*
        * 3.double random();生成[0.0,1.0)之间的随机数,若想控制小数位数,可以自行编码控制
        * */
        System.out.println(Math.random()*100+1);//28.97085122980648
        /*
        负数向右即是向上取整:
        * 4.向上取整:double ceil(double d);无论小数点后面是否满足四舍五入的条件都要向前进一位。负数向0取整。
        * */
        System.out.println(Math.ceil(2.23));//3.0
        /*
        负数向左即是向下取整
        * 5.向下取整 double floor(double d) ,向下取整 ,无论小数点后面是否满足四舍五入的条件,小数点后面的数都舍弃。
         * 负数想更小的值向下取整。
        * */
        System.out.println(Math.floor(-3.3));//-4.0
        System.out.println(Math.floor(-3.9));//-4.0
        /*
        * 6.static long round() :四舍五入,返回值是long类型。
        * static int round(float a) :返回int类型
        * static long round(double a):返回long类型
        * */
        System.out.println(Math.round(2.35));//2
        System.out.println(Math.round(2.5));//3
        /*
        * 7.static double pow(double a, double b):求a的b次幂
        * */
        System.out.println(Math.pow(2,3));//8.0
        System.out.println(Math.pow(1.1,3));//1.3310000000000004不精确,
    /*
    底层源码:
         public static double pow(double a, double b) {
            return StrictMath.pow(a, b); // default impl. delegates to StrictMath
        }
    *   public static native double pow(double a, double b);
    * */
        /*
        * 8.double sqrt(double a):开平方
        * */
        System.out.println(Math.sqrt(9));//3.0
        System.out.println(Math.sqrt(12.25));//3.5
        /*
        * 9.static double cbrt(double a):开立方
        * */
        System.out.println(Math.cbrt(27));//3.0
    }
}

###BigDecimal 类的练习代码

package JAVA_API.num6_Math;

import java.math.BigDecimal;
import java.util.Scanner;

/**
 * @author yyc
 * 2021/9/15 13:46
 */
public class BigDecimalDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入两个小数:");
        double a = scan.nextDouble();//2.1
        double b = scan.nextDouble();//-2.1
        System.out.println(a+b);//0.0
        System.out.println(a-b);//4.2
        System.out.println(a*b);//-4.41
        System.out.println(a/b);//-1.0

        //创建BigDecimal对象
        //BigDecimal(double a);使用double值创建BigDecimal对象进行计算作比较
     /*   BigDecimal b1 = new BigDecimal(a);//2.1
        BigDecimal b2 = new BigDecimal(b);//-2.1
        System.out.println(b1.add(b2));//0E-51,不精确
*/
        //为避免double 自身不精确问题,使用String类型形参创建BigDecimal对象,
        // 将double转成String,可以直接拼接空串"",也可以使用valueOf()
        BigDecimal b1 = new BigDecimal(a+"");
        BigDecimal b2 = new BigDecimal(b+"");
        //调用方法进行计算:
        //1.BigDecimal add(BigDecimal b);加法
        System.out.println(b1.add(b2));//0.0
        //2.BigDecimal subtract(BigDecimal b) 减法
        //3.BigDecimal multiply(BigDecimal b) 乘法
        //4.BigDecimal divide(BigDecimal b) 除法,除不尽的时候会报算术异常。ArithmeticException
        //5.解决方案是:使用重载的divide()方法。
        //BigDecimal divide(BigDecimal b, int scale, BigDecimal ROUNDE_HALF_UP);第一个参数是除数,第二个参数是保留小数位数,第三个参数是舍入模式
        System.out.println(b1.divide(b2,2,BigDecimal.ROUND_HALF_UP));// 10 / 3 = 3.33

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值