菜鸡的Java笔记 数字操作类
数字操作类
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笔记 数字操作类的更多相关文章
- 菜鸡的Java笔记 日期操作类
日期操作类 Date 类与 long 数据类型的转换 SimpleDateFormat 类的使用 Calendar 类的使用 如 ...
- 菜鸡的Java笔记 Object 类
Object 类 Object类 的主要作用 Object 类的常用方法 内容 虽然有了对象的向上转型,可以解决了参数的统一问题,但是 ...
- 菜鸡的Java笔记 实践 - java 数组操作
讲解一个继承的实现思路 要求定义一个数组操作类(Array类),在这个类里面可以进行整型数组的操作,由外部传入数组的大小 ,并且要求实现数据的保存以及数据的 ...
- 菜鸡的Java笔记 第三十 - java 异常的捕获及处理
异常的捕获及处理 1.异常的产生分析以及所带来的影响 2.异常的处理的基本格式 3.异常的处理流程 4.异常的处理模式 5.自定义 ...
- 菜鸡的Java笔记 - java 常用类库
CommonClassLibrary 常用类库 定时调度 定时调度指的是每到一个时刻,都会自动的产生某些特定的操作形式 con ...
- 菜鸡的Java笔记 - java 反射机制
反射机制 1.观察 Class 类的使用 2.利用反射改善工程设计模式 3.反射操作类结构 content (内容) 1. ...
- 菜鸡的Java笔记 comparator 比较器
1.数组操作类: Arrays 2.两种比较器的使用: Comparable Comparator 3.实现二叉树算法 content (内容) ...
- 菜鸡的Java笔记 第二十八 - java 包的定义
包的主要作用以及定义 包的导入操作 系统常见的开发包 jar 程序命令 包的定义 在任何的操作系统之中都有一个统一的共识:同一个目录下不能够存在有相同的文 ...
- 菜鸡的Java笔记 第二十七 - java 链表基本概念
链表基本概念 1.链表的基本形式 2.单向链表的完整实现 认识链表 链表= 可变长的对象数组,属于动态对象数组的范畴 链表 ...
随机推荐
- asp.net core使用identity+jwt保护你的webapi(一)——identity基础配置
前言 用户模块几乎是每个系统必备的基础功能,如果每次开发一个新项目时都要做个用户模块,确实非常无聊.好在asp.net core给我们提供了Identity,使用起来也是比较方便,如果对用户这块需求不 ...
- 阿里云ECS服务器Centos中安装SQL Server(破解内存限制)
前言 前段时间赶上阿里云618活动入手了一个低配的Linux服务器,供自己学习使用,在安装SQL Server中遇到了很多小问题,查阅很多博客结合自身遇到的问题做个总结. 安装过程 1.下载阿里云在线 ...
- Dapr + .NET Core实战(九)本地调试
前几节开发Dapr应用程序时,我们使用 dapr cli 来启动dapr服务,就像这样: dapr run --dapr-http-port 3501 --app-port 5001 --app-id ...
- (目录)Fortran学习笔记:开坑!!!
前言:因为某些原因,需要使用Fortran编写程序,记录下Fortran语法学习过程中的部分笔记.在此开坑记录,立下Flag,"希望年末能够更新完" Fortran 学习笔记 陈橙 ...
- Superior Scheduler:带你了解FusionInsight MRS的超级调度器
摘要:Superior Scheduler是一个专门为Hadoop YARN分布式资源管理系统设计的调度引擎,是针对企业客户融合资源池,多租户的业务诉求而设计的高性能企业级调度器. 本文分享自华为云社 ...
- JVM学习笔记——GC算法
GC 算法 GC 即 Garbage Collection 垃圾回收.JVM 中的 GC 99%发生在堆中,而 Java 堆中采用的垃圾回收机制为分代收集算法.即将堆分为新生代和老年代,根据不同的区域 ...
- 创业公司用 Serverless,到底香不香?
作者 | Mike Butusov 来源 | Serverless 公众号 在过去的 5 年里,使用云厂商处理应用后台的流行程度大幅飙升.其一,初创企业主采用 Serverless 方式,以节省基础设 ...
- 洛谷3809 SA模板 后缀数组学习笔记(复习)
其实SA这个东西很久之前就听过qwq 但是基本已经忘的差不多了 嘤嘤嘤 QWQ感觉自己不是很理解啊 所以写不出来那种博客 QWQ只能安利一些别人的博客了 小老板 真的是讲的非常好 不要在意名字 orz ...
- Flutter随笔(二)——使用Flutter Web + Docker + Nginx打造一个简单的Web项目
前言 Flutter作为一个跨平台UI框架,功能十分强大,仅用一套代码便能编译出Android.iOS.Web.windows.macOS.Windows.Linux等平台上的应用,各平台应用体验高度 ...
- PTA实验7-2-3 求矩阵的局部极大值 (15分)
实验7-2-3 求矩阵的局部极大值 (15分) 给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值.本题要求给定矩阵的全 ...