[自学java]BigInteger & BigDecimal

BigInteger

Java用来处理超过long型范围的数的封装类。

构造方法

BigInteger b1 = new BigInteger(String val);
BigInteger b1 = new BigInteger(String val , int radix);

常用方法

加减乘除运算需要借助方法:

b1.add(b2);
b1.subtract(b2);
b1.multiply(b2);
b1.divide(b2);

返回BigInteger对象

        BigInteger b1 = new BigInteger("12345678901234567890123");
        BigInteger b2 = new BigInteger("1234567890");

        System.out.println(b1.add(b2));
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b1.divide(b2));
OUT:
12345678901235802458013
12345678901233333322233
15241578751714678875170903950470
10000000001000

其他方法:
remainder(); 取余
pow();乘方a.pow(b)=a^b
gcd();最大公约数
abs(); 绝对值
negate(); 取反数

BigDecimal

Java用来精确处理浮点数的封装类。
因为浮点数计算不精确,例如:

    public static void main(String[] args) {
        System.out.println(0.05+0.01);
    }
out:
0.060000000000000005

double 类型(默认)计算会发生精度缺失。

构造器

推荐使用:(可以保存精度)
BigDecimal(String val)
注:
如果一定要使用double类型的数据作为传递参数,请这样:
BigDecimal.valueOf(double val)
因为,BigDecimal(double val) 参数会丢失精度。

常用方法

精确浮点数运算,类似BigInteger:

        BigDecimal b1 = new BigDecimal("0.05");
        BigDecimal b2 = new BigDecimal("0.01");

        System.out.println(b1.add(b2));
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b2.divide(b1));

        System.out.println(b1.compareTo(b2));
        System.out.println(b1.max(b2));
out:
0.06
0.04
0.0005
0.2
1
0.05

注意:除法涉及到保留位数,否则出现除不尽的异常。
因为调用繁琐, 需要将每个double转化为BigDecimal,可以做成一个工具类,包含加减乘除。

private static final int DIV_SCALE = 9;//保留位数

    public static double div(double b1 , double b2){
        BigDecimal bd1 = BigDecimal.valueOf(b1);
        BigDecimal bd2 = BigDecimal.valueOf(b2);
        //设置除不尽四舍五入
        return bd1.divide(bd2,DIV_SCALE,RoundingMode.HALF_UP).doubleValue();
    }

    public static void main(String[] args) {
        System.out.println(div(0.045 ,0.007));
    }

out:
6.428571429
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容