Java - Math类和BigInteger、BigDecimal的常用方法及练习

目录

🐶第一章 Math类

1.1 概述

1.2 常用方法

 ❓面试题:为啥Math.round(-1.5)=-1?

🐶第二章 BigInteger类

2.1 概述

2.2 构造方法

2.3 常用方法

2.4 BigInteger的读入方法

❓Leetcode练习题

🐶第三章 BigDecimal类

3.1 概述

3.2 构造方法

3.3 常用方法

3.4 除法计算


🐶第一章 Math类

1.1 概述

java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。

1.2 常用方法

方法名 方法名

说明

补充

public static int abs(int a)

返回参数的绝对值

public static double ceil(double a)

返回大于或等于参数的最小double值,等于一个整数

ceil(天花板),向上取整

-1.5向上取整为-1

public static double floor(double a)

返回小于或等于参数的最大double值,等于一个整数

floor(地板),向下取整

-1.5向下取整为-2

public static int round(float a)

按照四舍五入返回最接近参数的int

round(-1.5)=-1

🧀实例1(向上取整)

package Day1109;


public class TestDemo01 {
    public static void main(Stringargs) {
        doubleTest_Data= {1,1.3,1.6,0,-1,-1.3,-1.6};
        for (int i = 0; i < Test_Data.length; i++) {
            System.out.println(Test_Data[i]+"的Math.ceil结果为:"+Math.ceil(Test_Data[i]));
        }
    }
}

 结果:

🧀实例2(向下取整)

package day1211;

public class testDemo03 {
    public static void main(String[] args) {
        double[] Test_Data= {1,1.3,1.5,1.6,0,-1,-1.3,-1.5,-1.6};
        for (int i = 0; i < Test_Data.length; i++) {
            System.out.println(Test_Data[i]+"的Math.floor结果为:"+Math.floor(Test_Data[i]));
        }
    }
}

结果

🧀实例3(四舍五入)

package day1211;

public class testDemo03 {
    public static void main(String[] args) {
        double[] Test_Data= {1,1.3,1.5,1.6,0,-1,-1.3,-1.5,-1.6};
        for (int i = 0; i < Test_Data.length; i++) {
            System.out.println(Test_Data[i]+"的Math.round结果为:"+Math.round(Test_Data[i]));
        }
    }
}

 结果:

 

 ❓面试题:为啥Math.round(-1.5)=-1?

四舍五入的算法:Math.floor(a+0.5) 加0.5然后向下取整

-1.5+0.5=-1,向下取整,所以还是-1

-1.6+0.5=-1.1,向下取整,所以是-2

🐶第二章 BigInteger类

在Java中经常会遇到比较大的数,甚至超过了long型,那么该如何处理这些"大数据"呢?

有两个类BigInteger和BigDecimal分别表示大整数型和大浮点型类。从原则上是可以表示”天文单位“一样大的数字,缺点是比较费内存

2.1 概述

java.math.BigInteger类,不可变的任意精度的整数。如果运算中,数据的范围超过了long类型后,可以使用BigInteger类实现,该类的计算整数是不限制长度的。

2.2 构造方法

BigInteger(String value) 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。超过long类型的范围,已经不能称为数字了,因此构造方法中采用字符串的形式来表示超大整数,将超大整数封装成BigInteger对象。

2.3 常用方法

基本整型:

整型(byte,short,int,long)、字符型(char)、布尔型(boolean)、浮点型(float,double)

方法名

含义

BigInteger.valueOf(Obj)

将括号内的参数Obj转换成BigInteger数据类型

abs()

取绝对值

negate()

取相反数

add(BigInteger value)

返回其值为 (this + val) 的 BigInteger,超大整数加法运算

subtract(BigInteger value)

返回其值为 (this - val) 的 BigInteger,超大整数减法运算

multiply(BigInteger value)

返回其值为 (this * val) 的 BigInteger,超大整数乘法运算

divide(BigInteger value)

返回其值为 (this / val) 的 BigInteger,超大整数除法运算,除不尽取整数部分

compareTo()

用来比较两个数大小,返回一个int型数据(1 大于,0等于,-1小于)

a.max(b)

返回大的那个数,类型为BigInteger

a.min(b)

返回小的那个数,类型为BigInteger

🧀实例1

package day1020;

import java.math.BigInteger;

public class DemoTest04 {
    public static void main(String[] args) {
        int A=42;
        BigInteger f=BigInteger.valueOf(A);
        System.out.println("f="+f);//输出的f将会等于BigInteger型的42

        BigInteger f2=new BigInteger("-9");
        System.out.println("f2="+f2.abs());//9

        BigInteger f3=new BigInteger("9");
        System.out.println("f3="+f3.negate());//-9
    }
}

🧀实例2

public static void main(String[] args){
    BigInteger big1 = new BigInteger("987654321123456789000");
    BigInteger big2 = new BigInteger("123456789987654321");
    //加法运算
    BigInteger add = big1.add(big2);
    System.out.println("求和:"+add);
    //减法运算
    BigInteger sub = big1.subtract(big2);
    System.out.println("求差:"+sub);
    //乘法运算
    BigInteger mul = big1.multiply(big2);
    System.out.println("乘积:"+mul);
    //除法运算
    BigInteger div = big1.divide(big2);
    System.out.println("除法:"+div);
}

🧀实例3

package day1020;

import java.math.BigInteger;

public class DemoTest04 {
    public static void main(Stringargs) {
        BigInteger bigNum1=new BigInteger("52");
        BigInteger bigNum2=new BigInteger("27");

        //1.compareTo():返回一个int型数据(1大于,0等于,-1小于)
        int num=bigNum1.compareTo(bigNum2);
        System.out.println(num);//1

        //2.max():直接返回大的那个数,类型为BigInteger
        //原理:return(compareTo(val)<0?this:val);
        BigInteger compareMax=bigNum1.max(bigNum2);
        System.out.println(compareMax);//52

        //3.min():直接返回小的那个数,类型
        BigInteger compareMin=bigNum1.min(bigNum2);
        System.out.println(compareMin);//27


    }
}

2.4 BigInteger的读入方法

nextBigInteger(), 从控制台读入一个BigInteger型数据,类似于读入int型的nextInt();

package Day1108;

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

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);//读入
        System.out.println("请输入一个整数");
        BigInteger bi=sc.nextBigInteger();//读入一个Integer
        System.out.println("bi="+bi);

    }
}

结果

2.5 BigInteger的构造方法

默认的是十进制,也就是我们平常较为常见的

package day1204;

import java.math.BigInteger;

public class testDemo01 {
    public static void main(String[] args) {
        BigInteger d=new BigInteger("48");
        System.out.println(d);

    }
}

结果:

支持自定义进制类型(已存在的),例如二进制,四进制,八进制,十六进制,如下:

package day1204;

import java.math.BigInteger;

public class testDemo01 {
    public static void main(String[] args) {
        BigInteger d=new BigInteger("48");
        System.out.println(d);

        String str="1011100111";
        int radix=2;//2代表二进制,为下一行代码中的参数radix赋值
        BigInteger num1=new BigInteger(str,radix);
        System.out.println(num1);
    }
}

结果:

❓Leetcode练习题

leetcode66 加一

 代码

import java.math.BigInteger;

class Solution {
    public int[] plusOne(int[] digits) {
        //1.数组转整数
        BigInteger sum = new BigInteger("0");
        for (int i = 0; i < digits.length; i++) {
            sum = sum.multiply(BigInteger.valueOf(10)).add(BigInteger.valueOf(digits[i]));
        }
        // 2.整数+1
        sum = sum.add(BigInteger.valueOf(1));

        //3.整数转为字符串
        String str = sum.toString();

        //4.字符串转为字节数组
        String[] array = str.split("");

        int[] nums = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            nums[i] = Integer.parseInt(array[i]);
        }

        return nums;
    }
}

 

🐶第三章 BigDecimal类

3.1 概述

java.math.BigDecimal类,不可变的、任意精度的有符号十进制数。该类可以实现超大浮点数据的精确运算。

3.2 构造方法

BigDecimal(String value)将 BigDecimal的十进制字符串表示形式转换为 BigDecimal。

3.3 常用方法

BigDecimal类的加法减法乘法与BigInteger类相同,不在重复。

3.4 除法计算

BigDecimal类实现精确的浮点数除法运算,如果两个浮点除法计算后是无限循环,那么就会抛出异常。

除法运算方法:

  • BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)

    • divesor:此 BigDecimal 要除以的值。

    • scale:保留的位数

    • roundingMode:舍入方式

  • 舍入方式:BigDecimal类提供静态的成员变量来表示舍入的方式

    • BigDecimal.ROUND_UP 向上加1。

    • BigDecimal.ROUND_DOWN 直接舍去。

    • BigDecimal.ROUND_HALF_UP 四舍五入。

public static void main(String[] args){
      BigDecimal big1 = new BigDecimal("0.05");
      BigDecimal big2 = new BigDecimal("0.01");
      //加法计算
      BigDecimal add = big1.add(big2);
      System.out.println("求和:"+add);
      //减法计算
      BigDecimal sub = big1.subtract(big2);
      System.out.println("求差:"+sub);
      //乘法计算
      BigDecimal mul = big1.multiply(big2);
      System.out.println("乘法:"+mul);
      //除法计算
      BigDecimal div = big1.divide(big2,2,BigDecimal.ROUND_HALF_UP);
      System.out.println(div);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值