数字操作类
        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. java 从零开始手写 RPC (04) -序列化

    序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实 ...

  2. Cobar提出的一种在分库场景下对Order By / Limit 的优化

    搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读.问题排查.踩坑实践. 本文已收录 https://github.com/lkxiaolou/lkxiao ...

  3. 基于Tesseract组件的OCR识别

    基于Tesseract组件的OCR识别 背景以及介绍 欲研究C#端如何进行图像的基本OCR识别,找到一款开源的OCR识别组件.该组件当前已经已经升级到了4.0版本.和传统的版本(3.x)比,4.0时代 ...

  4. 阿里 Midway 正式发布 Serverless v1.0,研发提效 50%

    Github:https://github.com/midwayjs/midway 开源为了前端和 Node.js 的发展,点 Star! 去年阿里提出 Serverless 架构,并利用其新一代研发 ...

  5. 初入CTF(封神榜第一关)

    注:网址中的%20是空格的意思 1判断是否存在注入点 构造?id=1 and 1=1(不报错) 构造?id=1 and 1=2(报错或者不显示内容) 报错说明and后面的语句被识别 2判断回显字段的长 ...

  6. mac无坑安装nginx

    mac无坑安装nginx 首先需要mac下有一个缺失的软件包的管理器------->homebrew 1.打开终端输入 brew update 说明homebrew已经安装好了 2.继续执行以下 ...

  7. vue3.x自定义组件双向数据绑定v-model

    vue2.x 语法 在 2.x 中,在组件上使用 v-model 相当于绑定 value prop 并触发 input 事件: <ChildComponent v-model="pag ...

  8. Coursera Deep Learning笔记 结构化机器学习项目 (下)

    参考:https://blog.csdn.net/red_stone1/article/details/78600255https://blog.csdn.net/red_stone1/article ...

  9. docker multi-stage 多阶段构建

    多阶段构建 一.需求 二.普通构建 1.编写Dockerfile 2.构建镜像 三.多阶段(multi-stage)构建 1.编写Dockerfile 2.构建镜像 四.比较2个镜像的体积大小 我们在 ...

  10. Noip模拟55 2021.9.17(打表大胜利)

    T1 skip 普通$dp$很好打: $f[i]=max(f[j]-\sum_{k=1}^{K}k+a_i)$ 就是要注意边界问题很烦人. 1 #include<bits/stdc++.h> ...