前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中BigDecimal简单及复杂计算(开根、小数次幂、三角函数、π值等)

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

作者头像
Diuut
发布2023-10-23 08:59:49
2.5K0
发布2023-10-23 08:59:49
举报
文章被收录于专栏:Diuut

需求 金融或科学场景下,计算精度要求较高,设计精度要求高的情况一般就会使用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
复制
<!-- https://mvnrepository.com/artifact/ch.obermuhlner/big-math -->
<dependency>
    <groupId>ch.obermuhlner</groupId>
    <artifactId>big-math</artifactId>
    <version>2.3.0</version>
</dependency>

参数中需要指定精度的话使用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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单运算
    • 加法:使用 add 方法进行两个 BigDecimal 对象的相加
      • 减法:使用 subtract 方法进行两个 BigDecimal 对象的相减
        • 乘法:使用 multiply 方法进行两个 BigDecimal 对象的相乘
          • 除法:使用 divide 方法进行两个 BigDecimal 对象的相除,参数中可以指定多种取余方式
            • 取余:使用 remainder 方法获取两个 BigDecimal 对象的余数
              • 幂运算:使用 pow 方法计算 BigDecimal 对象的幂
                • 比较运算:使用 compare 方法获得比较结果
                • 复杂运算
                  • 开根运算:使用sqrt获取BigDecimal 对象的开根过后结果
                    • 幂运算:使用 pow 方法计算 BigDecimal 对象的幂(计算x的y次幂,支持小数)
                      • 对数运算:使用log的多种方法获取BigDecimal 对象的对数运算结果
                        • 以自然常数e为底的指数函数运算:使用exp获取BigDecimal 对象的以e为底的指数函数运算结果
                          • 三角函数运算:使用多种方法获取BigDecimal 对象的三角函数运算结果
                            • 反三角函数运算:使用多种方法获取BigDecimal 对象的反三角函数运算结果
                              • 反双曲函数运算:使用多种方法获取BigDecimal 对象的双反曲函数运算结果
                                • 阶乘运算:使用factorial方法获取BigDecimal 对象的阶乘运算结果
                                  • 获取指定精度π
                                    • 获取指定精度e
                                      • 指数运算:使用exponent方法获取BigDecimal 对象的指数运算结果
                                        • 取小数函数:使用fractionalPart方法获取BigDecimal 对象的小数部分
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档