数字操作类
        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. VUE自学日志02-应用与组件实例

    准备好了吗? 我们刚才简单介绍了 Vue 核心最基本的功能--本教程的其余部分将更加详细地涵盖这些功能以及其它高阶功能,所以请务必读完整个教程! 应用 & 组件实例 创建一个应用实例创建一个应 ...

  2. Java 爬取 51job 数据 WebMagic实现

    Java 爬取 51job 数据 一.项目Maven环境配置 相关依赖 jar 包配置 <parent> <groupId>org.springframework.boot&l ...

  3. docker efk(filebeat+logstash+es+kibana)

    ​ 1.系统架构 ​ 通常我们说的elastic stack,也就是elk,通过es 收集日志数据,存到elasticsearch,最后通过kibana进行统计分析,但是elastic公司后续又推出了 ...

  4. HTML模板标签解析

    HTML基本模板 1 <!DOCTYPE html> 2 <html lang="zh-CN"> 3 <head> 4 <meta cha ...

  5. 题解 [ZJOI2016]大森林

    题目传送门 Description 现在有 \(n\) 棵以 \(1\) 为根的树,每棵树有一个生长节点,有 \(m\) 次操作,每次操作是下面三种中的一个: 在 \(l\sim r\) 的这些树的生 ...

  6. 题解 [NOI2014]购票

    题目传送门 题目大意 有一个 \(n\) 个点的树,每个点有三个值 \(p_u,q_u,l_u\) ,现在可以从 \(u\) 走到点 \(v\) 当且仅当 \(v\) 是 \(u\) 的祖先并且 \( ...

  7. PTA数据结构 习题2.8 输出全排列 (20分)

    习题2.8 输出全排列 (20分) 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出正整数n(<10 ...

  8. Java(40)网络编程

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201659.html 博客主页:https://www.cnblogs.com/testero ...

  9. 航胥:北航教务助手——Beta阶段发布声明

    下载地址在文章末尾! 这里是"航胥",一款更想要了解你的北航教务助手 Beta阶段,我们进化了! Beta阶段我们的新功能有: 课程评价功能 所有用户选过的课程都会在课程评价页面进 ...

  10. [Beta]the Agiles Scrum Meeting 11

    会议时间:2020.5.26 21:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 issue yjy 帮助解决技术问题 tq 完成评测机新增评测指标 评测部分增加更多评测指标 wjx ...