处理大数字与浮点数
算计的类型都有取值范围,当碰到大于这个范围的数时,计算机就会截断数值的二进制,导致错误。对于这种情况,我们怎么做呢?
Java提供了一个BigInterger类,支持大整数的加减乘除
具体用法:
先创建一个BigInterger对象,然后对象调用下面方法。
1.BigInteger(String value):构造方法,将value字符串变成BigInteger类型数据。
2.BigInteger add(BigInteger value):加法,求两个BigInteger类型数据的和。
3.BigInteger subtract(BigInteger value):减法,求两个BigInteger类型数据的差。
4.BigInteger multiply(BigInteger value):乘法,求两个BigInteger类型数据的积。
5.BigInteger divide(BigInteger divisor):除法,求两个BigInteger类型数据的商。
6.BigInteger modInverse(BigInteger m):求模,求BigInteger类型数据对m求模。
7.BigInteger remainder(BigInteger divisor):求余数,求BigInteger类型数据除以divisor的余数。
8.BigInteger max(BigInteger value):最大数,求两个BigInteger类型数据的最大值。
9.BigInteger min(BigInteger value):最小数,求两个BigInteger类型数据的最小值。
10.BigInteger gcd(BigInteger value):最大公约数,求两个BigInteger类型数据的最大公约数。
11.BigInteger abs():绝对值,求BigInteger类型数据的绝对值。
12.BigInteger negate():相反数,求BigInteger类型数据的相反数。
以上方法转自https://blog.csdn.net/weixin_37730482/article/details/70258534
对于两个浮点数,计算机有时不能精确的表达浮点数,比如0.0001和0.000100000000000000000001计算机会认为它俩相等,所以面对像这种情况,比较它俩的绝对值是否在某个允许范围之内。
double i = 0.0001;
double j = 0.00010000000000000001;
if ( Math.Abs(i - j) < 1e-10 )
System.out.println("true");
else System.out.println("false");