菜鸡的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.单向链表的完整实现 认识链表 链表= 可变长的对象数组,属于动态对象数组的范畴 链表 ...
随机推荐
- kendoUI 多选下拉列表 kendoMultiSelect
问题1:被重复渲染 点击新增按钮----弹出模态框 多选下拉列表在多选框中只是初始化过一次.但是每次点击新增后 发现 多选下拉列表 被重复渲染了 解决方案 在 新增时 先将其父元素div中 的s ...
- vue-混入( mixin 更方便的组件功能复用方法)的使用
前言 vue 中组件完成了样式和功能的综合复用,通过自定义指令完成了一部分功能的复用,本文总结一下混入在vue项目开发中提供的非常便利的功能复用. 正文 1.混入的分类 (1)全局混入 <div ...
- Java程序的执行过程
Java程序的执行过程 编译器将 Java 源代码编译成字节码class文件 类加载到 JVM 里面后,执行引擎把字节码转为可执行代码 执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行
- Java集合——List,Set,Map总结笔记
1. 集合 Collection 1.1 Java 集合框架 Java 集合框架位于 java.util 包中.Java 集合框架主要包括两种类型的容器,一种是集合(C ...
- enum 试图表达64位数
enum AttributeType: unsigned long long{ aa = 1, bb = 2, cc = 0x842AC1040000}; int main() { DWORD64 b ...
- sql提示1055 不让你group by
是不是突然写好的sql语句 部署上去就 Expression #2 of SELECT list is not in GROUP BY clause and containsnonaggregated ...
- PTA实验4-2-3 验证“哥德巴赫猜想” (20分)
实验4-2-3 验证"哥德巴赫猜想" (20分) 数学领域著名的"哥德巴赫猜想"的大致意思是:任何一个大于2的偶数总能表示为两个素数之和.比如:24=5+19, ...
- scala基础篇---- Try finally不加catch的使用情形
普通的try-catch-finally Try{ } catch{//不加catch向上抛出异常 case _=> } finally{//一般是资源关闭 } 普通的try-finally ...
- 时间轮机制在Redisson分布式锁中的实际应用以及时间轮源码分析
本篇文章主要基于Redisson中实现的分布式锁机制继续进行展开,分析Redisson中的时间轮机制. 在前面分析的Redisson的分布式锁实现中,有一个Watch Dog机制来对锁键进行续约,代码 ...
- Unity——伤害数字显示HUD
伤害数字显示HUD 游戏中收到伤害掉血,会有飘动的伤害数值: 可以使用OnGUI中GUI.Label来实现: 可自定义字体,颜色,大小等: 如果需要更好看的数字特效,可以手动添加: 普通字体不够好看可 ...