• Java中的大数运算


     

    一:大数运算出现的背景

      java里面整型int与浮点型float,double它们存放数据的范围是有限的,当出行更大的数值时会发生溢出。

       最典型的场景是金融行业,直接使用单精度或者双精浮点数来表示金额信息会出现精度误差。

    二:Java中的大数运算类

      Java提供了两个用于高精度计算的类:BigInteger和BigDecimal。

      创建:需要注意必须使用String类型参数来创建大数变量,而不是用基本类型值来生成大数变量。

      运算:调用BigInteger和BigDecimal封装好的运算方法即可。

       BigInteger和BigDecimal都是不可变的,每次修改都会新建一个新对象,因为其底层其实是long或数组!

    三:BigDecimal的底层原理

       十进制整数在转化成二进制数时不会有精度问题,那么把十进制小数扩大N倍让它在整数的维度上进行计算,并保留相应的精度信息,就不会有精度损失的问题。

      BigDecimal底层数据结构主要是由下面四个属性值组成

    nt scale; //有多少位小数(即小数点后有多少位)
    int precision; //总工有多少位数字
    long intCompact; //字符串去掉小数点后,转为long的值,只有当传的字符串长度小于18时才使用该言
    BigInteger intVal; //当传的字符串长度大于等于18时才使用BigInteger表示数字

      即:BigDecimal底层的数据结构其实是  将String转为了long或BigInteger来进行计算,当长度小于18时,转化为long类型进行运算,大于等于18时,转化为BigInteger类型进行运算。

    四:BigInteger的底层原理

       1)JDK的BigInteger类里用一个int数组来保存数据:

    int[] mag;

      2)用一个属性来表示正负

    int signum;

      原理:把一个字符串val所代表的的大整数转换并保存mag数组中,把正负保存在signum属性,然后使用数组操作来实现各种运算方法。

    五:Java实现大数四则运算的算法

       todo。

      

  • 相关阅读:
    js 闭包范式概述
    [置顶] 学习JDK源码:编程习惯和设计模式
    第七届蓝桥杯JavaB组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    Java实现蓝桥杯历届真题国王的遗产
    Java实现蓝桥杯历届真题国王的遗产
  • 原文地址:https://www.cnblogs.com/ygj0930/p/13554954.html
Copyright © 2020-2023  润新知