常用类——数学相关类

一、Math 类

java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。

属性

属性名称属性描述
public static final double PI返回圆周率

方法

方法名称方法描述
public static double abs(double a) 返回 double 值的绝对值
public static double ceil(double a)返回大于等于参数的最小的整数。
public static double floor(double a) 返回小于等于参数最大的整数。
public static long round(double a)返回最接近参数的 long。(相当于四舍五入方法)
public static double pow(double a,double b)a的b幂次方法
public static double sqrt(double a)返回a的平方根
public static double random():返回[0,1)的随机值
public static double max(double x, double y)返回x,y中的最大值
public static double min(double x, double y)返回x,y中的最小值

二、Random 类

java.util.Random 类,他可以在指定的取值范围内随机产生数字。在Random类中有两种构造方法

Random() 无参构造方法,用于创建一个伪随机数生成器。
Random(long seed) 有参构造方法,使用一个long类型的 seed 种子创建伪随机数生成器。

无参构造

创建 Random 对象时没有传入种子参数,程序会自动以当前时间为时间戳。时间不同,所以经过算法处理每一次的运行结果都是不同的

	// 无参构造
    Random random = new Random();
    // 0 - 100 的随机数

    for (int i = 0; i < 8; i++) {
    	// 因为无参构造使用时间戳做种子,所以种子不同,结果不同
        System.out.print(random.nextInt(100) + ", ");
    }

第一次运行

61, 30, 70, 54, 11, 30, 38, 93, 

第二次运行

77, 97, 32, 44, 95, 23, 28, 87, 

有参构造

	// 有参构造
    Random random2 = new Random(3);
    // 0 - 100 的随机数
    // 因为有参构造使用的种子都是 3,种子相同,结果相同
    for (int i = 0; i < 8; i++) {
        System.out.print(random2.nextInt(100) + ", ");
    }

第一次运行

34, 60, 10, 81, 28, 2, 49, 64,

第二次运行

34, 60, 10, 81, 28, 2, 49, 64, 

常用方法

方法名称方法描述
public Random()创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同。(没有真正的随机数,需要种子产生随机数,同一个种子产生的伪随机数序列相同)
public Random(long seed)使用单个 long 种子创建一个新的随机数生成器。该种子是伪随机数生成器的内部状态的初始值,该生成器可通过方法 next(int) 维护。
boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。
void nextBytes(byte[] bytes)生成随机字节并将其置于用户提供的 byte 数组中。
double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。
float nextFloat()返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。
double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。
int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n)返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
long nextLong()返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。

三、BigInteger 类

java 中表示整数类型最大是 lang 类型。可以表示 (2 的 63次方-1), 但是如果我们使用的整数比 lang 还大,怎么办。
这时就可以使用 BigInteger 类。理论上可以保存无限大的整数。

常用方法

方法名称方法描述
BigInteger(String val)构造方法
BigInteger add(BigInteger val)
BigInteger subtract(BigInteger val)
BigInteger multiply(BigInteger val)
BigInteger divide(BigInteger val)
BigInteger remainder(BigInteger val)
int intValue()将此 BigInteger 转换为 int。
long longValue()将此 BigInteger 转换为 long。
float floatValue()将此 BigInteger 转换为 float。

四、BigDecimal

原文: java 中 BigDecimal 详解

Java 中使用 floatdouble 保存浮点数,但是因为计算机是二进制的,浮点数会失去一定的精度。实际存储的是一个近似值。
但是在金融商业 计算中,很小的误差都是致命的, 所以就出现了 BigDecimal,他可以用来做精确运算。理论上可以保存无限大的浮点数。

方法名称方法描述
BigDecimal(String val)创建一个具有参数所指定以字符串表示的数值的对象
BigDecimal add(BigDecimal val)
BigDecimal subtract(BigDecimal val)
BigDecimal multiply(BigDecimal val)
BigDecimal divide(BigDecimal val)
BigDecimal divide(BigDecimal divisor, int roundingMode)
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
BigDecimal remainder(BigDecimal val)
double doubleValue():将此 BigDecimal 转换为 double。

1. 格式化小数点 setScale()

BigDecimal.setScale()方法用于格式化小数点

  • setScale(1)
    表示保留一位小数,默认用四舍五入方式
  • setScale(1,BigDecimal.ROUND_DOWN)
    直接删除多余的小数位,如2.35会变成2.3
  • setScale(1,BigDecimal.ROUND_UP)进位处理,
    2.35变成2.4
  • setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入
    2.35变成2.4
  • setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,
    2.35变成2.3,如果是5则向下舍

2. 除法 divide()

使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,不然会出现报错
BigDecimal divide(BigDecimal divisor(除数), int scale(精确小数位), RoundingMode roundingMode(舍入模式))

  • ROUND_UP 非零部分丢弃前面数字加一
    舍入远离零的舍入模式。
    在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。
    注意,此舍入模式始终不会减少计算值的大小。

  • ROUND_DOWN 截断
    接近零的舍入模式。
    在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。
    注意,此舍入模式始终不会增加计算值的大小。

  • ROUND_CEILING
    接近正无穷大的舍入模式。
    如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;
    如果为负,则舍入行为与 ROUND_DOWN 相同。
    注意,此舍入模式始终不会减少计算值。

  • ROUND_FLOOR
    接近负无穷大的舍入模式。
    如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;
    如果为负,则舍入行为与 ROUND_UP 相同。
    注意,此舍入模式始终不会增加计算值。

  • ROUND_HALF_UP 四舍五入
    向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。
    如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
    注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。

  • ROUND_HALF_DOWN

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

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

  • ROUND_HALF_EVEN

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

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

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

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

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

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

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

    1.15>1.2 1.25>1.2

  • ROUND_UNNECESSARY

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值