(一)大数运算背景
在java中,整数型int、浮点型float和double存储数据的范围有限,移动更大的数字时会发生溢出。
最典型的场景是金融业,直接使用单精度或双精度浮点数来表示金额信息会产生精度误差。
(2) Java的最大数运算类
Java有两个高精度计算类: BigInteger和BigDecimal。
创建:请注意,必须使用String类型参数创建许多变量,而不是使用基本类型的值生成许多变量。
运算:调用用BigInteger和BigDecimal封装的运算方法即可。
BigInteger和BigDecimal都保持不变,每次修改时都会创建新对象。 因为它的基础其实是长整型或数组。
三. BigDecimal的基础原理
如果十进制整数在变换为二进制数时没有精度问题,那么只要将十进制的小数放大n倍,用整数的维度进行计算,保留相应的精度信息,就没有精度损失的问题。
BigDecimal的基本数据结构主要由四个属性值组成:
nt scale; //小数有多少位(小数点后有多少位) )。
int precision; //总工有多少位数字
长整型; //字符串将转换为长整型值(小数点除外),并且仅在传递的字符串长度小于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实现大数四则运算的算法
托多。