本文共 8856 字,大约阅读时间需要 29 分钟。
在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法
BigDecimal(BigInteger val)BigDecimal(BigInteger unscaledVal, int scale)BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)BigDecimal(BigInteger val, MathContext mc)BigDecimal(char[] in)BigDecimal(char[] in, int offset, int len) BigDecimal(char[] in, int offset, int len, MathContext mc) BigDecimal(char[] in, MathContext mc)BigDecimal(String val) BigDecimal(String val, MathContext mc)BigDecimal(double val) BigDecimal(double val, MathContext mc) BigDecimal(int val) BigDecimal(int val, MathContext mc)BigDecimal(long val)BigDecimal(long val, MathContext mc)
BigDecimal abs() BigDecimal abs(MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("2.13"); BigDecimal bigDecimal2 = new BigDecimal("-2.13"); bigDecimal1 = bigDecimal1.abs();//2.13 bigDecimal2 = bigDecimal2.abs();//2.1
BigDecimal add(BigDecimal augend) BigDecimal add(BigDecimal augend, MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("2.13"); BigDecimal bigDecimal2 = new BigDecimal("-2.1321"); bigDecimal1 = bigDecimal1.add(bigDecimal2);System.out.println(bigDecimal1);//-0.0021
BigDecimal divide(BigDecimal divisor)BigDecimal divide(BigDecimal divisor, int roundingMode)BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)BigDecimal divide(BigDecimal divisor, MathContext mc)BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
案例
BigDecimal bigDecimal1 = new BigDecimal("10");BigDecimal bigDecimal2 = new BigDecimal("2.0");bigDecimal1 = bigDecimal1.divide(bigDecimal2);//5
BigDecimal[] divideAndRemainder(BigDecimal divisor)BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("10");BigDecimal bigDecimal2 = new BigDecimal("2.12");BigDecimal[] bigDecimal3 = bigDecimal1.divideAndRemainder(bigDecimal2);//[4,1.52]
BigDecimal divideToIntegralValue(BigDecimal divisor) BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("10");BigDecimal bigDecimal2 = new BigDecimal("3");BigDecimal bigDecimal3 = bigDecimal1.divideToIntegralValue(bigDecimal2);//3
BigDecimal multiply(BigDecimal multiplicand)BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("10"); BigDecimal bigDecimal2 = new BigDecimal("2.12");BigDecimal bigDecimal4 = bigDecimal1.multiply(bigDecimal2);//21.20
BigDecimal max(BigDecimal val)BigDecimal min(BigDecimal val)int compareTo(BigDecimal val)
案例
BigDecimal bigDecimal1 = new BigDecimal("10");BigDecimal bigDecimal2 = new BigDecimal("2.12");BigDecimal bigDecimal4 = bigDecimal1.max(bigDecimal2);//10
BigDecimal negate()BigDecimal negate(MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("-10");BigDecimal bigDecimal4 = bigDecimal1.negate();//10
BigDecimal plus()BigDecimal plus(MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("-10");System.out.println(bigDecimal1.plus());//-10BigDecimal bigDecimal2 = new BigDecimal("22");System.out.println(bigDecimal2.plus());//22
BigDecimal pow(int n) BigDecimal pow(int n, MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("-10"); BigDecimal bigDecimal4 = bigDecimal1.pow(2); System.out.println(bigDecimal4);//100
BigDecimal remainder(BigDecimal divisor) BigDecimal remainder(BigDecimal divisor, MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("10"); BigDecimal bigDecimal2 = new BigDecimal("4");BigDecimal bigDecimal4 = bigDecimal1.remainder(bigDecimal2);System.out.println(bigDecimal4);//2
BigDecimal setScale(int newScale)//《scale指的是你要保留几位小数》,默认舍入模式是ROUND_UNNECESSARYBigDecimal setScale(int newScale, int roundingMode)BigDecimal setScale(int newScale, RoundingMode roundingMode)
常见RoundingMode是舍入模式,其值如下
1、UP
:绝对值向上取整模式,不论正负
BigDecimal bigDecimal1 = new BigDecimal("4.1134").setScale(1, RoundingMode.UP);//4.2 BigDecimal bigDecimal1 = new BigDecimal("4.1034").setScale(1, RoundingMode.UP);//4.2 BigDecimal bigDecimal1 = new BigDecimal("-4.1034").setScale(1, RoundingMode.UP);//-4.2
2、CEILING
:向上取整模式
BigDecimal bigDecimal1 = new BigDecimal("4.1134").setScale(1, RoundingMode.CEILING);//4.2BigDecimal bigDecimal2 = new BigDecimal("4.1034").setScale(1, RoundingMode.CEILING);//4.2BigDecimal bigDecimal3 = new BigDecimal("-4.1034").setScale(1, RoundingMode.CEILING);//-4.1
3、DOWN
:绝对值向下取整模式,不论舍入位是否为零,都直接舍弃
BigDecimal bigDecimal1 = new BigDecimal("4.1634").setScale(1, RoundingMode.DOWN);//4.1BigDecimal bigDecimal3 = new BigDecimal("-4.1634").setScale(1, RoundingMode.DOWN);//-4.1
4、FLOOR
:向下取整模式
BigDecimal bigDecimal1 = new BigDecimal("4.1634").setScale(1, RoundingMode.FLOOR);//4.1BigDecimal bigDecimal2 = new BigDecimal("4.1034").setScale(1, RoundingMode.FLOOR);//4.1BigDecimal bigDecimal3 = new BigDecimal("-4.1634").setScale(1, RoundingMode.FLOOR);//-4.2BigDecimal bigDecimal4 = new BigDecimal("-4.1034").setScale(1, RoundingMode.FLOOR);//-4.2
5、HALF_UP
:四舍五入模式
BigDecimal bigDecimal1 = new BigDecimal("4.1634").setScale(1, RoundingMode.HALF_UP);//4.2BigDecimal bigDecimal2 = new BigDecimal("4.1034").setScale(1, RoundingMode.HALF_UP);//4.1BigDecimal bigDecimal3 = new BigDecimal("-4.1634").setScale(1, RoundingMode.HALF_UP);//-4.2BigDecimal bigDecimal4 = new BigDecimal("-4.1034").setScale(1, RoundingMode.HALF_UP);//-4.1
6、UNNECESSARY
:保留小数点位数小于实际位数,则抛出ArithmeticException。
BigDecimal bigDecimal1 = new BigDecimal("2.5").setScale(1, RoundingMode.UNNECESSARY);//2.5//java.lang.ArithmeticExceptionBigDecimal bigDecimal2 = new BigDecimal("2.51").setScale(1, RoundingMode.UNNECESSARY);
BigDecimal stripTrailingZeros()
案例
BigDecimal c = new BigDecimal("2.200").stripTrailingZeros();//2.2
BigDecimal subtract(BigDecimal subtrahend) BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
案例
BigDecimal bigDecimal1 = new BigDecimal("10"); BigDecimal bigDecimal2 = new BigDecimal("4.2"); BigDecimal bigDecimal4 = bigDecimal1.subtract(bigDecimal2);//5.8
String toEngineeringString()有必要时使用工程计数法 String toPlainString()不使用任何指数 String toString()有必要时使用科学计数法
BigDecimal ulp()
案例
BigDecimal bigDecimal2 = new BigDecimal("4.20")ulp();//0.01
static BigDecimal valueOf(double val)static BigDecimal valueOf(long val)static BigDecimal valueOf(long unscaledVal, int scale)BigInteger toBigInteger()BigInteger toBigIntegerExact()
int precision()//返回这个BigDecimal的精确int scale()//返回这个BigDecimal的小数保留位数int signum()//此方法返回-1,0或1作为此BigInteger的值对应是负,零或正数 BigDecimal scaleByPowerOfTen(int n) //返回一个BigDecimal,其数值等于(this* 10 n)。 BigInteger unscaledValue() //返回BigInteger其值为此的未缩放值的值BigDecimal。 BigDecimal round(MathContext mc) //BigDecimal根据MathContext设置返回舍入 。
BigInteger支持任意精度的整数,在运算中可以准确地表示任何大小的整数值,而不会丢失任何信息。BigDecimal支持任何精度的定点数,可以用它进行精确的货币计算。
BigInteger(byte[] val)//将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger。BigInteger(int signum, byte[] magnitude)//将BigInteger的符号大小表示形式转换为BigInteger。BigInteger(int bitLength, int certainty, Random rnd)//构造一个随机生成的正BigInteger,它可能是素数,具有指定的bitLength。BigInteger(int numBits, Random rnd)//构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。BigInteger(String val)//将BigInteger的十进制字符串表示形式转换为BigInteger。BigInteger(String val, int radix)//将指定基数中的BigInteger的String表示形式转换为BigInteger。
BigInteger max(BigInteger val) //返回两个大整数的最大者BigInteger min(BigInteger val) //两个大整数的最小者BigInteger mod(BigInteger val) //取模运算BigInteger abs() //绝对值BigInteger negate()//相反数byte[] toByteArray(BigInteger val)//将大整数转换成二进制反码保存在byte数组中
案例
BigInteger bigInteger = new BigInteger("21");BigInteger bigInteger1 = new BigInteger("2");System.out.println(bigInteger.mod(bigInteger1));//1
//加法BigInteger add(BigInteger val)BigInteger subtract(BigInteger val)//减法
案例
BigInteger bigInteger = new BigInteger("10");BigInteger bigInteger1 = new BigInteger("22"); System.out.println(bigInteger.subtract(bigInteger1));//22
BigInteger divide(BigInteger val)//除法BigInteger multiply(BigInteger val) //乘法BigInteger remainder(BigInteger val) //返回当前大整数除以val的余数
案例
BigInteger bigInteger = new BigInteger("20");BigInteger bigInteger1 = new BigInteger("2");System.out.println(bigInteger.divide(bigInteger1));//10
BigInteger gcd(BigInteger val) //返回大整数的最大公约数
BigInteger pow(int exponent)返回当前大整数的exponent次方
案例
BigInteger bigInteger = new BigInteger("21");System.out.println(bigInteger.pow(2));//441
BigInteger and(BigInteger val) 返回两个大整数的按位与的结果BigInteger andNot(BigInteger val) 返回两个大整数与非的结果BigInteger not() 返回当前大整数的非BigInteger or(BigInteger val) 返回两个大整数的按位或BigInteger xor(BigInteger val) 返回两个大整数的异或
转载地址:http://jivkk.baihongyu.com/