Java中BigDecimal简单及复杂计算(开根、小数次幂、三角函数、π值等) 您所在的位置:网站首页 开平方根号的函数怎么算 Java中BigDecimal简单及复杂计算(开根、小数次幂、三角函数、π值等)

Java中BigDecimal简单及复杂计算(开根、小数次幂、三角函数、π值等)

2024-06-30 22:58| 来源: 网络整理| 查看: 265

需求 金融或科学场景下,计算精度要求较高,设计精度要求高的情况一般就会使用BigDecimal类型,此处将常用的以及可能会用到的计算类型列举下。

简单运算

PS:对象初始化时使用double类型数据进行构造会导致数据失真,因此不建议使用,如需要使用小数类型,推荐使用String进行构造。

加法:使用 add 方法进行两个 BigDecimal 对象的相加代码语言:javascript复制BigDecimal result = BigDecimal.ZERO.add(BigDecimal.ONE); //result=10;减法:使用 subtract 方法进行两个 BigDecimal 对象的相减代码语言:javascript复制BigDecimal result = BigDecimal.TEN.subtract(BigDecimal.ONE); //result=9;乘法:使用 multiply 方法进行两个 BigDecimal 对象的相乘代码语言:javascript复制BigDecimal result = new BigDecimal("10").multiply( new BigDecimal("3")); //result=30;除法:使用 divide 方法进行两个 BigDecimal 对象的相除,参数中可以指定多种取余方式代码语言:javascript复制BigDecimal result = BigDecimal.TEN.divide(BigDecimal.valueOf(3), 2, RoundingMode.HALF_UP); //result=3.33;取余:使用 remainder 方法获取两个 BigDecimal 对象的余数代码语言:javascript复制BigDecimal result = BigDecimal.TEN.remainder(BigDecimal.valueOf(4)); //result=2;幂运算:使用 pow 方法计算 BigDecimal 对象的幂代码语言:javascript复制BigDecimal result = BigDecimal.valueOf(3).pow(3); //result=27;比较运算:使用 compare 方法获得比较结果代码语言:javascript复制复杂运算

以上是常用的运算,但是如果设计复杂度开根或者小数次幂的话,自带的方法就不满足了,因此,需要引入其他的BigDecimal运算类(big-math),引入以下依赖:

代码语言:javascript复制 ch.obermuhlner big-math 2.3.0

参数中需要指定精度的话使用MathContext来指定。

开根运算:使用sqrt获取BigDecimal 对象的开根过后结果代码语言:javascript复制BigDecimal num1 = new BigDecimal("2"); BigDecimal result = BigDecimalMath.sqrt(num1, new MathContext(6)); System.out.println("result="+result); // result=1.41421幂运算:使用 pow 方法计算 BigDecimal 对象的幂(计算x的y次幂,支持小数)代码语言:javascript复制BigDecimal num1 = new BigDecimal("2"); BigDecimal num2 = new BigDecimal("1.5"); BigDecimal result1 = BigDecimalMath.pow(num1, num2, new MathContext(6)); System.out.println("result1=" + result1); BigDecimal num3 = new BigDecimal("-1.5"); BigDecimal result2 = BigDecimalMath.pow(num1, num3, new MathContext(6)); System.out.println("result2=" + result2); //result1=2.82843 //result2=0.353553对数运算:使用log的多种方法获取BigDecimal 对象的对数运算结果代码语言:javascript复制BigDecimal num1 = new BigDecimal("2"); BigDecimal result1 = BigDecimalMath.log(num1, new MathContext(6)); System.out.println("result1="+result1); BigDecimal result2 = BigDecimalMath.log2(num1, new MathContext(6)); System.out.println("result2="+result2); BigDecimal result3 = BigDecimalMath.log10(num1, new MathContext(6)); System.out.println("result3="+result3); //result1=0.693147 //result2=1 //result3=0.301030以自然常数e为底的指数函数运算:使用exp获取BigDecimal 对象的以e为底的指数函数运算结果代码语言:javascript复制BigDecimal num1 = new BigDecimal("2"); BigDecimal result1 = BigDecimalMath.exp(num1, new MathContext(6)); System.out.println("result1="+result1); //result1=7.38906三角函数运算:使用多种方法获取BigDecimal 对象的三角函数运算结果代码语言:javascript复制BigDecimal num1 = new BigDecimal("10"); BigDecimal result1 = BigDecimalMath.sin(num1, new MathContext(6)); System.out.println("result1="+result1); BigDecimal result2 = BigDecimalMath.cos(num1, new MathContext(6)); System.out.println("result2="+result2); BigDecimal result3 = BigDecimalMath.tan(num1, new MathContext(6)); System.out.println("result3="+result3); BigDecimal result4 = BigDecimalMath.cot(num1, new MathContext(6)); System.out.println("result4="+result4); //result1=-0.544021 //result2=-0.839072 //result3=0.648361 //result4=1.54235反三角函数运算:使用多种方法获取BigDecimal 对象的反三角函数运算结果代码语言:javascript复制BigDecimal num1 = new BigDecimal("0.5"); BigDecimal result1 = BigDecimalMath.asin(num1, new MathContext(6)); System.out.println("result1="+result1); BigDecimal result2 = BigDecimalMath.acos(num1, new MathContext(6)); System.out.println("result2="+result2); BigDecimal result3 = BigDecimalMath.atan(num1, new MathContext(6)); System.out.println("result3="+result3); BigDecimal result4 = BigDecimalMath.acot(num1, new MathContext(6)); System.out.println("result4="+result4); //result1=0.523599 //result2=1.04720 //result3=0.463648 //result4=1.10715反双曲函数运算:使用多种方法获取BigDecimal 对象的双反曲函数运算结果代码语言:javascript复制BigDecimal num1 = new BigDecimal("2"); BigDecimal result1 = BigDecimalMath.asinh(num1, new MathContext(6)); System.out.println("result1="+result1); BigDecimal result2 = BigDecimalMath.acosh(num1, new MathContext(6)); System.out.println("result2="+result2); BigDecimal num2 = new BigDecimal("0.5"); BigDecimal result3 = BigDecimalMath.atanh(num2, new MathContext(6)); System.out.println("result3="+result3); BigDecimal num3 = new BigDecimal("-2"); BigDecimal result4 = BigDecimalMath.acoth(num3, new MathContext(6)); System.out.println("result4="+result4); //result1=1.44364 //result2=1.31696 //result3=0.549306 //result4=-0.549306阶乘运算:使用factorial方法获取BigDecimal 对象的阶乘运算结果代码语言:javascript复制BigDecimal num1 = new BigDecimal("5"); BigDecimal result1 = BigDecimalMath.factorial(num1, new MathContext(6)); System.out.println("result1=" + result1); //result1=120获取指定精度π代码语言:javascript复制BigDecimal result1 = BigDecimalMath.pi(new MathContext(20)); System.out.println("result1=" + result1); //result1=3.1415926535897932385获取指定精度e代码语言:javascript复制BigDecimal result1 = BigDecimalMath.e(new MathContext(20)); System.out.println("result1=" + result1); //result1=2.7182818284590452354指数运算:使用exponent方法获取BigDecimal 对象的指数运算结果代码语言:javascript复制int result1 = BigDecimalMath.exponent(BigDecimal.valueOf(1.456E99)); System.out.println("result1=" + result1); //result1=99取小数函数:使用fractionalPart方法获取BigDecimal 对象的小数部分代码语言:javascript复制BigDecimal num1 = new BigDecimal("123.456"); BigDecimal result1 = BigDecimalMath.fractionalPart(num1); System.out.println("result1=" + result1); //result1=0.456

以上是大部分该方法中设计的函数类型, 通过组合能够计算大部分复杂场景的公式。

转载请署名(Diuut)

Post Views: 2



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有