Java8-java.math

简介:java.math包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

环境准备:

1)系统环境windows10 64bit pro;

2)开发环境jdk8;

3)开发工具idea;

4)创建一个常规Java项目;

5)将src.zip导入;

6)首先看一下(翻译)包信息说明;

/**
 *提供用于执行任意精度整数的类
 *算术({@code BigInteger})和任意精度的十进制
 *算术({@code BigDecimal})。{@code BigInteger}与之类似
 *除了提供任意
 *精度,因此{@code BigInteger}上的操作不会溢出
 *或者失去精确性。除了标准的算术运算,
 *{@code BigInteger}提供了模运算,GCD计算,
 *素性测试,素数生成,位操作,等等
 *其他杂项业务。
 *
 *{@code BigDecimal}提供任意精度的带符号十进制数
 *适用于货币计算等的数字。{@代码
 *BigDecimal}让用户完全控制取整行为,
 *允许用户从一个全面的八个集合中进行选择
 *舍入模式。
 *
 *@自JDK1.1以来
 */

6-1)BigDecimal(java.math.BigDecimal)

不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。
如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是unscaledValue × 10^(-scale)。
提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。
可以通过两种类型的操作来处理 BigDecimal 的标度:标度/舍入操作和小数点移动操作。标度/舍入操作(setScale 和 round)返回BigDecimal,其值近似地(或精确地)等于操作数的值,但是其标度或精度是指定的值;即:它们会增加或减少对其值具有最小影响的存储数的精度。小数点移动操作(movePointLeft 和 movePointRight)返回从操作数创建的 BigDecimal,创建的方法是按指定方向将小数点移动一个指定距离。

BigDecimal 的自然排序与 equals 方法不一致。

6-2)BigInteger(java.math.BigInteger)

不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。
提供Math下的方法、模算术、GCD 计算、质数测试、素数生成、位操作等。

6-3)BitSieve(java.math.BigSieve)

字节过滤类。

6-4)MathContext(java.math.MahContext)

该对象是封装上下文设置的不可变对象,它描述数字运算符的某些规则。比如数据的精度,舍入方式等等。

6-5)MutableBigInteger(java.math.MutableBigInteger)

可变的BigInteger。

6-6)RoundingMode(java.math.RoundingMode)

舍入模式。枚举类型,定义了很多常用的数据舍入方式。

1ROUND_UP

舍入远离零的舍入模式。

在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。

注意,此舍入模式始终不会减少计算值的大小。

2ROUND_DOWN

接近零的舍入模式。

在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。

注意,此舍入模式始终不会增加计算值的大小。

3ROUND_CEILING

接近正无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;

如果为负,则舍入行为与 ROUND_DOWN 相同。

注意,此舍入模式始终不会减少计算值。

4ROUND_FLOOR

接近负无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;

如果为负,则舍入行为与 ROUND_UP 相同。

注意,此舍入模式始终不会增加计算值。

5ROUND_HALF_UP

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。

如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。

注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。

6ROUND_HALF_DOWN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。

如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。

7ROUND_HALF_EVEN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;

如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。

如果前一位为奇数,则入位,否则舍去。

以下例子为保留小数点1位,那么这种舍入方式下的结果。

1.15>1.2 1.25>1.2

8ROUND_UNNECESSARY

断言请求的操作具有精确的结果,因此不需要舍入。

如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

举例:

图片源引自https://www.cnblogs.com/chenyq/p/5129408.html

6-7)SignedMuableBigInteger(java.math.SignedMuableBigInteger)

有符号的可变的BigInteger。

7)常用方法

/**
 * 保留两位小数
 */
BigDecimal bigNum = new BigDecimal("传入的参数");
bigNum.setScale(2, BigDecimal.ROUND_HALF_UP);

/**
 * 减法运算
 */
BigDecimal bigNumFirst = new BigDecimal("被减数");
BigDecimal bigNumSecond = new BigDecimal("减数");
bigNumFirst.subtract(bigNumSecond);

/**
 * 加法运算
 */
BigDecimal bigNumFirst = new BigDecimal("被加数");
BigDecimal bigNumSecond = new BigDecimal("加数");
bigNumFirst.add(bigNumSecond);

/**
 * 乘法运算
 */
BigDecimal bigNumFirst = new BigDecimal("被乘数");
BigDecimal bigNumSecond = new BigDecimal("乘数");
bigNumFirst.multiply(bigNumSecond);

/**
 * 除法运算
 */
BigDecimal bigNumFirst = new BigDecimal("被除数");
BigDecimal bigNumSecond = new BigDecimal("除数");
// 精度 不能小于0
int scale = 10;
bigNumFirst.divide(bigNumSecond, scale, BigDecimal.ROUND_HALF_UP);

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值