数字操作类
        Math 类的使用
        Random 类的使用
        BigInteger 和 BigDecimal 类的使用
        
        Math 是一个数学的处理程序类,在 MMath 类中提供有一系列的数学处理公式
        在 Math 类中提供的所有方法都属于 static 方法,那么就表示这个类的方法可以使用静态导入完成,同时这个类中没有属于
        在 Math 类中重点观察一个操作方法: public static long round(double a) 实现四舍五入的操作
        
        范例:观察四射五入

package cn.mysterious.study3;

public class MathClass {

    public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Math.round(100.789)); // 101
System.out.println(Math.round(15.50)); // 16
System.out.println(Math.round(-15.50)); // -15
// 如果是负数,小数位超过了0.5就会进行进位
System.out.println(Math.round(-15.51)); // -16
} }

但是现在 有一个小小的问题出现了。使用四舍五入的操作固然好,但是整个代码的操作过程里面会发现一个问题 小数位统一都没了
        所以现在就会发现一点问题:此时的程序代码冰不可能被现实开发所使用
        在 Math 类中提供有一个 pow() 方法: public static double pow(double a,double b)

package cn.mysterious.study3;

public class MathClass {

    public static void main(String[] args) {
System.out.println(Math.pow(10.0, 5)); // 10000.0
} }

round() 本身就是不保留小数位的四舍五入操作,所以为了可以保存准确的小数位,那么必须进行一些有效的数学处理操作
        
        范例:实现准确的四舍五入操作

package cn.mysterious.study3;
class MyMath{
/**
* 实现数字的四舍五入操作
* @param num
*?/
public static double round(double num,int scale) {
// TODO Auto-generated method stub
return Math.round(num * Math.pow(10.0, scale)) / Math.pow(10.0, scale);
}
}
public class MathClass { public static void main(String[] args) {
System.out.println(MyMath.round(10.9789, 2)); // 10.97
} }

这种代码属于工具代码
            
    Random 类
        这个类的主要功能是产生随机数使用的,在这个类中有如下的几个操作方法

NO 方法名称  类型 简介
1 public Random() 普通 实例化 Random 类对象
2 public Random(long seed) 普通 设置种子数
3 public int nextInt(int bound) 普通 取得下一个不超过边界的正整数
4 public double nextDouble() 普通 取得下一个正小数

范例:观察如下的操作代码

package cn.mysterious.study3;

import java.util.Random;

public class RandomClass {
public static void main(String[] args) {
Random rand = new Random();
for (int i = 0; i < 10; i++) {
System.out.print(rand.nextInt(100) + ",");
}
System.out.println("\n" + "RandomClass.main()");
for (int i = 0; i < 10; i++) {
System.out.print(rand.nextDouble() + ",");
}
}
}

大部分的情况下使用 int 作为随机数是最为方便的
            
        范例:设置种子数

package cn.mysterious.study3;

import java.util.Random;

public class RandomClass {
public static void main(String[] args) {
Random rand = new Random(567);
for (int i = 0; i < 10; i++) {
System.out.print(rand.nextInt(100) + ",");
}
}
}

实际上现在可以利用这个随机数实现一个 36 选 7 的操作
        
        范例:彩票
            数字不能够重复,不能够有0不能够大于36

package cn.mysterious.study3;

import java.util.Random;

public class RandomClass {
public static void main(String[] args) throws Exception{
int data[] = new int[7]; // 生成一个数组,保存7个最终的号码
ch(data);
java.util.Arrays.sort(data);
print(data);
}
public static void print(int temp[]){
for (int i = 0; i < temp.length; i++) {
System.out.print(temp[i] + ",");
}
}
public static void ch(int temp[]){
int foot = 0; // 作为数组的操作脚标
Random rand = new Random();
while (foot < 7) { // 表示数组中的内容还没有选够
int num = rand.nextInt(37); // 选出一个数据
if (num != 0) { // 必须保证数据不能够为0
if(!isRepeat(temp, num)){ // 不存在
temp[foot ++] = num;
}
}
}
}
/**
* 判断内容是否存在
* @param temp[] 要判断的数组数据
* @param num 生成的数字
* @return 如果存在则返回 true 表示不可使用
*/
public static boolean isRepeat(int temp [],int num){ // 判断选定的内容是否存在
for (int i = 0; i < temp.length; i++) {
if (num == temp[i]) {
return true;
}
}
return false;
}
}

BigInteger
        如果说现在有一个数字非常非常的大,已经超过了 double 的范围,那么恶最初的设计思路是将其变为String保存
        而后 String 变为字符数组,一个一个字符的进行计算操作。所以在最早的时候这样大数字的操作是非常繁琐的
        而 java 为了简化其操作专门提供了 java.math.BigInteger 类。 BigInteger 是 Number 的子类,表示的就是一个数字
            构造方法: public BigInteger(String val)
            加法操作: public BigInteger add(BigInteger val)
            减法操作: public BigInteger subtract(BigInteger val)
            乘法操作: public BigInteger multiply(BigInteger val)
            除法操作: public BigInteger divide(BigInteger val)
            除法操作: public BigInteger[] divideAndRemainder(BigInteger val)
                数组第一个内容保存的是商
                数组第二个内容是余数
                
        范例:实现基本的四则运算

package cn.mysterious.study3;

import java.math.BigInteger;

public class BigIntegerClass {

    public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger bigA = new BigInteger("12345678998765432112345678998754321");
BigInteger bigB = new BigInteger("123456789987654321");
System.out.println("加法操作:" + bigA.add(bigB));
System.out.println("减法操作:" + bigA.subtract(bigB));
System.out.println("乘法操作:" + bigA.multiply(bigB));
System.out.println("除法操作:" + bigA.divide(bigB));
BigInteger result [] = bigA.divideAndRemainder(bigB);
System.out.println("商:" + result[0] + ",余数:" + result[1]);
} }

虽然java提供有 BigInteger 工具类,但是这个类不可能胜任复杂的数学计算
            
    BigDecimal
        BigDecimal 类与 BigInteger 类相同,唯一的差别在于 BigDecimal 类保存的是小数
        BigDecimal 本身也属于 Number 的子类,同时在 BigDecimal 类中定义有如下的构造方法:
            构造方法: public BigDecimal(BigInteger val)
            构造方法: public BigDecimal(String val)
            构造方法: public BigDecimal(double val)

package cn.mysterious.study3;

import java.math.BigDecimal;

public class BigDecimalClass {

    public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Double.MAX_VALUE * Double.MAX_VALUE); // Infinity
BigDecimal bigA = new BigDecimal(Double.MAX_VALUE);
BigDecimal bigB = new BigDecimal(Double.MAX_VALUE);
System.out.println(bigA.pow(2));
System.out.println(bigA.multiply(bigB));
} }

在 BigDecimal 类里面最早也提供有四舍五入的支持,但是这个支持是利用除法实现的
            public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
                进位模式: public static final int ROUND_HALF_UP

package cn.mysterious.study3;

import java.math.BigDecimal;
class MyMath{
public static double round(double num,int scale){
return new BigDecimal(num).divide(new BigDecimal(1),scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
public class BigDecimalClass { public static void main(String[] args) { System.out.println(MyMath.round(-15.5545545, 2));
System.out.println(MyMath.round(-15.51, 0));
} }

总结
        1.几乎所有的编程语言都会提供有与 Math 类 类似的功能
        2.Random 生成随机数操作

菜鸡的Java笔记 数字操作类的更多相关文章

  1. 菜鸡的Java笔记 日期操作类

    日期操作类        Date 类与 long 数据类型的转换        SimpleDateFormat 类的使用        Calendar 类的使用                如 ...

  2. 菜鸡的Java笔记 Object 类

    Object 类        Object类 的主要作用        Object 类的常用方法             内容        虽然有了对象的向上转型,可以解决了参数的统一问题,但是 ...

  3. 菜鸡的Java笔记 实践 - java 数组操作

    讲解一个继承的实现思路                要求定义一个数组操作类(Array类),在这个类里面可以进行整型数组的操作,由外部传入数组的大小        ,并且要求实现数据的保存以及数据的 ...

  4. 菜鸡的Java笔记 第三十 - java 异常的捕获及处理

    异常的捕获及处理        1.异常的产生分析以及所带来的影响        2.异常的处理的基本格式        3.异常的处理流程        4.异常的处理模式        5.自定义 ...

  5. 菜鸡的Java笔记 - java 常用类库

    CommonClassLibrary 常用类库        定时调度            定时调度指的是每到一个时刻,都会自动的产生某些特定的操作形式                    con ...

  6. 菜鸡的Java笔记 - java 反射机制

    反射机制        1.观察 Class 类的使用        2.利用反射改善工程设计模式        3.反射操作类结构            content (内容)        1. ...

  7. 菜鸡的Java笔记 comparator 比较器

    1.数组操作类: Arrays        2.两种比较器的使用: Comparable Comparator        3.实现二叉树算法            content (内容)   ...

  8. 菜鸡的Java笔记 第二十八 - java 包的定义

    包的主要作用以及定义    包的导入操作    系统常见的开发包    jar 程序命令        包的定义        在任何的操作系统之中都有一个统一的共识:同一个目录下不能够存在有相同的文 ...

  9. 菜鸡的Java笔记 第二十七 - java 链表基本概念

    链表基本概念        1.链表的基本形式        2.单向链表的完整实现            认识链表        链表= 可变长的对象数组,属于动态对象数组的范畴        链表 ...

随机推荐

  1. openGauss X ShardingSphere,分布式方案的另一种最佳实践

    Apache ShardingSphere 持续助力于 openGauss 分布式数据库能力的构建.openGauss 数据库自 2020 年 6 月开源以来,受到了业界的广泛关注,现已吸引众多伙伴. ...

  2. 找出某名珍贵药材的生长区域(ArcPy实现)

    一.背景 某种珍贵药材生长于山区,通过研究了解到这种药材生长具有严格的生长条件.为了能更好地保护该药材的生长环境,现在需要使用GIS空间分析方法,将药材适合生长区域找出来,以便为该物种保护提供依据. ...

  3. Redis 面试常见问题———缓存雪崩、缓存击穿以及缓存穿透

    在开发中会面临缓存异常可能会出现三个问题,分别是缓存雪崩.缓存击穿和缓存穿透.这三个问题会导致大量请求从缓存转移到数据库,如果请求的并发量很大的话,就会导致数据库崩溃.所以在面试官也会经常问这些问题. ...

  4. 一文了解MySQL性能测试及调优中的死锁处理方法,你还看不明白?

    一文了解MySQL性能测试及调优中的死锁处理方法,你还看不明白? 以下从死锁检测.死锁避免.死锁解决3个方面来探讨如何对MySQL死锁问题进行性能调优. 死锁检测 通过SQL语句查询锁表相关信息: ( ...

  5. suricata的模块和插槽

    参考资料 suricata官方文档https://suricata.readthedocs.io/en/latest/performance/runmodes.html#different-runmo ...

  6. 保护模式篇——PAE分页

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  7. PyCharm永久破解方法,2021最新版本!!!

    1,下载破解补丁(已更新到2021.1版本): 关注微信公众号<程序员的时光>,回复破解补丁即可: 下载补丁文件 jetbrains-agent.jar 和importat.txt文件并将 ...

  8. git常用的一些简单命令

    1.如果一个文件被修改了,但是还没有使用 git add 命令,此时想取消这次修改,需要执行的命令如下: git checkout -- 文件名 2.如果一个文件执行了 git add ,此时想取消这 ...

  9. Zabbix 5.0:监控阿里云RDS

    Blog:博客园 个人 由于近期压测,需要频繁登录阿里云查看RDS监控,每次登录查看监控步骤较为繁琐,故将监控接入到zabbix. 概述 由于阿里云已做了RDS的监控,我们只需要通过阿里云SDK把这些 ...

  10. ArrayList集合底层原理

    目录 ArrayList集合特点及源码分析 ArrayList源码分析 成员变量 构造函数 增加方法 add(E e)方法 add(int index, E element)方法 删除方法 remov ...