Java常用类---Math类和Random类

Math类

简介

Java中,Math类包含了用于执行基本数学运算的属性和方法。Math类的方法都被定义为static形式(静态方法),通过Math类可以直接在主函数中直接调用。

如下图所示,Math.PI等于圆周率π、Math.E等于常量e……等属性和方法。

部分Math类方法介绍

  1. Math.abs 求绝对值,代码如下式所示。

    public static void main(String[] args) {
            int i = -1;
            double j = -1.5;
            //Math.abs方法输出绝对值(可为整数或小数)
            System.out.println(i+" 的绝对值结果为:"+Math.abs(i));
            System.out.println("==============================");
            System.out.println(j+" 的绝对值结果为:"+Math.abs(j));
        }

    运行结果,如下图所示。

  2. Math.sin 正弦函数,代码如下式所示。

        public static void main(String[] args) {
            double i = 30;
            //将角度转换为弧度
            double j = Math.toRadians(i);//j == π/6
            System.out.printf("弧度值为:"+"%.6f%n",j);
            System.out.printf("正弦值为:"+"%.2f%n",Math.sin(j));
            //将弧度转换为角度
            double k = Math.toDegrees(j);//k == 30°
            System.out.printf("角度为:"+"%.2f%n",k);
        }

    其中:Math.toDegrees为弧度转化为角度,Math.toRadians为角度转化为弧度。

    运行结果,如下图所示。

    同理可得,余弦函数Math.cos、正切函数Math.tan、反正弦函数Math.asin、反余弦函数Math.acos、反正切函数Math.atan、商的反正切函数Math.atan2的使用与上述相当。

    注:使用Math.sin等方法时,传入参数是角度,角度单位是弧度值形式。

  3. Math.ceil 对某数进行向上取整,ceil是天花板的意思,即返回大的值,代码如下式所示。

        public static void main(String[] args) {
            double a = -10.2;
            double b = -0.2;
            double c = -1.7;
            double d = 2.5;
            /*对某数进行向上取整。
             *在本例中某数是指变量a、b、c、d
             */
            System.out.println(Math.ceil(a));
            System.out.println(Math.ceil(b));
            System.out.println(Math.ceil(c));
            System.out.println(Math.ceil(d));
        }

    运行结果,如下图所示。

  4. Math.floor 向下取整,floor是地板的意思,即返回小的值,代码如下式所示。

        public static void main(String[] args) {
            double a = -10.2;
            double b = -0.2;
            double c = -1.7;
            double d = 2.5;
            /*对某数进行向下取整。
             *在本例中某数是指变量a、b、c、d
             */
            System.out.println(Math.floor(a));
            System.out.println(Math.floor(b));
            System.out.println(Math.floor(c));
            System.out.println(Math.floor(d));
        }

    运行结果,如下图所示。

    注:与Math.ceil方法相同,Math.floor方法的返回值也是double形式。

  5. Math.IEEEremainder(x, y) 求余数。其中,x为被除数,y为除数,返回值是根据IEEE 754标准返回余数,代码如下式所示。

        public static void main(String[] args) {
            double x = 15;
            double y = 4;
            System.out.println("Math.IEEEremainder方法的余数结果为:"+Math.IEEEremainder(x, y));
            System.out.println(x+"%"+y+"的余数结果为:"+(x%y));
        }

    运行结果,如下图所示。

    补充:由上图可以看出,所得余数结果与15%(取余)4的结果有所不同。本质原因是n值的取值不同!!!

    Math.IEEEremainder和运算符"%"的返回的余数都等于x - y * n ,但前者的n是取最接近x/y的整数,如果x/y返回的是介于两个整数之间的数,则n取值为偶数的一方。eg:x = 15, y = 4, x/y在(3,4)两个整数区间内,故n取4。

    而对于运算符"%"来说,n取值为x/y的整数结果。eg:x = 15, y = 4, x/y的整数部分为3,故n取3。

  6. Math.max 比较并返回两数中的最大值,Math.min 比较并返回两数中的最小值,代码如下式所示。

        public static void main(String[] args) {
            int a = 10;
            int b = 12;
            System.out.println("参数a和参数b中最大的数为:"+Math.max(a, b));
            System.out.println("参数a和参数b中最小的数为:"+Math.min(a, b));
    ​
        }

    运行结果,如下图所示。

  7. Math.sqrt 开平方,代码如下式所示。

        public static void main(String[] args) {
            int a = 25;
            int b = 100;
            System.out.println(a+" 的开方值为:"+Math.sqrt(a));
            System.out.println(b+" 的开方值为:"+Math.sqrt(b));
        }

    运行结果,如下图所示。

  8. Math.pow 求某数的任意次方,代码如下式所示。

        public static void main(String[] args) {
            double x = 25;
            int y = 100;
            double a = 2;
            int b = 3;
            System.out.println(x+"的"+a+"次方为:"+Math.pow(x, a));
            System.out.println(y+"的"+b+"次方为:"+Math.pow(y, b));
        }

    运行结果,如下图所示。

    其中,Math.pow(x, a)指的是求x的a次方,Math.pow(y, b)同理。当数值溢出的时候抛出ArithmeticException异常。

  9. Math.exp 开平方,代码如下式所示。

        public static void main(String[] args) {
            double a = 2;
            System.out.printf("e"+"的"+a+"次方为:"+"%.3f%n", Math.exp(a));
        }

    运行结果,如下图所示。

  10. Math.log 自然对数,即以e为底的对数,代码如下式所示。

    public static void main(String[] args) {
        double a = 1000;
        double b = Math.pow(Math.E, 2);
        System.out.println("以10为底"+a+"的对数为:"+Math.log10(a));
        System.out.printf("以e为底"+"e^2的对数为:"+Math.log(b));
    }

运行结果,如下图所示。

补充:Math.log10 指以10为底的对数,如上图所示。

  1. Math.rint 四舍五入求距离x最近的整数,结果可能大于x,也可能小于x,代码如下式所示。

        public static void main(String[] args) {
            double x = -5.23;
            double x1 = 10.5;
            double x2 = 10.53;
            System.out.println(x +"经过Math.rint方法后,结果为:"+Math.rint(x));
            System.out.println(x1 +"经过Math.rint方法后,结果为:"+Math.rint(x1));
            System.out.println(x2 +"经过Math.rint方法后,结果为:"+Math.rint(x2));
        }

    运行结果,如下图所示。

    其中,当取值为x.5时,rint方法计算距离最近的整数,返回偶数值,返回值的类型为double类型。

  2. Math.round 四舍五入求距离x最近的整数,与Math.rint类似。但该方法返回值类型为int型或者long型,且对于x.5类型数据,不存在rint方法的问题,代码如下式所示。

        public static void main(String[] args) {
            double x = -5.23;
            double x1 = 10.5;
            double x2 = 10.53;
            float x3 = 12.5F;
            System.out.println(x +"经过Math.round方法后,结果为:"+Math.round(x));
            System.out.println(x1 +"经过Math.round方法后,结果为:"+Math.round(x1));
            System.out.println(x2 +"经过Math.round方法后,结果为:"+Math.round(x2));
            System.out.println(x2 +"经过Math.round方法后,结果为:"+Math.round(x3));
        }

    运行结果,如下图所示。

    注:Math.round方法中,当参数为float类型时,返回值为int类型。当参数为double类型时,返回值为long类型。

  3. Math.random 返回0,1之间的一个随机数,范围在[0,1),代码如下式所示。

        public static void main(String[] args) {
            System.out.println("输出一个在[0,1)之间的数:"+Math.random());
            System.out.println("输出一个在[1,2)之间的数:"+Math.random()+1);
        }

    运行结果,如下图所示。

    补充:可以通过在Math.random()方法后加x来改变随机数产生的范围,新的范围为:[0+x, 1+x)

Random类

Random随机数生成方法

上一节,介绍了Math类中的random方法。调用这个方法能够返回一个范围在[0.0,1.0)之间的double值。

除此之外,在Random类中还存在另一种随机数生成方法。如下所示。

  1. Random():创建一个新的随机数生成器。

  2. Random(long seed):使用单个long种子创建一个新的随机数生成器。

    注:在创建一个Random对象的时候可以给定任意一个合法种子数,种子数只是随机算法的起源数字,和生成的随机数区间没有关系!!!

代码演示如下式所示。

    public static void main(String[] args) {
        //对象的种子缺省值为当前系统时间的毫秒数
        Random rand = new Random();
        //rand.nextInt()中的参数为随机数的上限,产生区间不包括上限。
        int i = rand.nextInt(200);
        System.out.println("产生的随机数为:"+i);
    }

运行结果,如下图所示。

注:对于种子相同的Random对象,所生成的随机数序列一样!!!如下图所示。

Random类中部分方法介绍

  1. nextBoolean() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 boolean 值。

  2. nextDouble() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在0.0 和 1.0之间均匀分布的 double 值。

  3. nextFloat() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在0.0 和 1.0之间均匀分布的 float 值。

  4. nextInt() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 int 值。

  5. nextLong() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 long 值。

  6. nextInt(int n) 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。如下式所示。

    Random rand = new Random(50); 
    int i = rand.nextInt(100);//范围在[0, 100)
    System.out.println("产生的随机数为:"+i);
  7. nextGaussian() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。

  8. setSeed(long seed) 使用单个 long 种子设置此随机数生成器的种子。

  9. nextBytes(byte[] bytes) 生成随机字节并将其置于用户提供的字节数组中。如下图所示。

补充:生成[0.0, 1.0)之间的小数、生成[0.0, 5.0)之间的小数、生成[1.0, 2.5)之间的小数,如下图所示。

注:本质上是对区间的乘加。eg:[1.0, 2.5) == [(0.0* 1.5)+1 , (1* 1.5)+1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/314421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MIdjourney】关于图像中人物视角的关键词

本篇仅是我个人在使用过程中的一些经验之谈,不代表一定是对的,如有任何问题欢迎在评论区指正,如有补充也欢迎在评论区留言。 1.全景镜头(panorama) 全景镜头是一种广角镜头,可以捕捉到比普通镜头更广阔的视野范围。全景镜头&…

C++内存分配策略

目录 基础概念 内存布局 分配方式 实现 1.new和delete 2.利用空间配置器alloc 3.用malloc和free 4.静态内存分配 基础概念 在讲内存分配之前,先对一些基础概念进行阐述,以便能更好的讨论问题 内存布局 代码编译为可执行程序后运行占用的内存可…

JWT的实现原理|一分钟快速了解

文章目录 jwt知识点认识JWTTOKEN是什么jwt的使用场景jwt的组成headerpayloadsignature jwt知识点 jwt官网 认识JWT JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑和自包含的方式,用于在…

【Spring 篇】基于注解的Spring事务控制详解

嗨,亲爱的读者朋友们!欢迎来到这篇关于基于注解的Spring事务控制的博客。如果你曾为事务处理而头痛,那么这里将为你揭开事务的神秘面纱。我们将一步步深入探讨Spring事务的世界,用简单易懂的语言、充满情感色彩的文字,…

YOLOv5改进系列(25)——添加LSKNet注意力机制(大选择性卷积核的领域首次探索)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系

探索SQL性能优化之道:实用技巧与最佳实践

SQL性能优化可能是每个数据库管理员和开发者在日常工作中必不可少的一个环节。在大数据时代,为确保数据库系统的响应速度和稳定性,掌握一些实用的SQL优化技巧至关重要。 本文将带着开发人员走进SQL性能优化的世界,深入剖析实用技巧和最佳实践…

ssm基于Java的超市管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本超市管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

关于Python里xlwings库对Excel表格的操作(三十二)

这篇小笔记主要记录如何【如何使用“Chart类”、“Api类"和“Axes函数”设置坐标轴标题文本内容】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库…

如何解决NAND系统性能问题?--NAND分类

一、故事引言 想象一下,你正在管理一座神奇的数据仓库,这个仓库没有沉重的门、旋转的磁盘和机械手臂,而是由一群训练有素的“数据小飞侠”组成。这些小飞侠们居住在一个叫做闪存芯片(NAND Flash,本文主人公&#xff0…

Java版企业电子招投标系统源代码,支持二次开发,采用Spring cloud技术

在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…

LeetCode刷题:141. 环形链表

题目: 是否独立解答出:否,有思路,但是代码报错,参考解题代码后,修改通过 解题思路:利用循环与哈希表存储每一个节点,如果发现添加不进去说明,存在环,正常来说…

Flutter之配置环境创建第一个项目

随着时代发展,使用Flutter开发的项目越来越多,于是踏上了Flutter开发之路。 作为一个Android开发人员,也只能被卷到与时俱进,下面一起创建一个Flutter项目吧。 一、Android开发,电脑上已经具备了的条件: …

基于springboot+vue药店管理系统

摘要 药店管理系统的设计和应用在当前社会背景下具有巨大的实际意义和社会价值。随着医药行业的不断发展和社会健康水平的提高,药店作为医疗服务的一部分,其管理方式也需要不断创新与优化。该系统的研究不仅关系到单一药店的运营效率,更涉及到…

软件包安装

1.软件包分类 1.1软件包的分类 源码包二进制包脚本安装包 1.2源码包 1.2.1源码包的样子 源码包可以认为是利用不同的计算机语言而写的包, 我们打开相应的文件也能看到相应的源码 1.2.2源码包的特点 源码包的优点: 开源, 如果有足够的能力, 可以修改源代码可以自由选择…

如何在Linux部署OpenGauss数据管理系统并实现固定公网地址访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合…

fastadmin 框架如何移除图片上传后预览中的删除按钮

在FastAdmin中,当我们启用了图片上传预览时,在预览区域会自动生成预览图和删除按钮,如下图: 如果我们想上移除掉这里的删除按钮,则需要启用自定义预览模板的功能。 首先我们找到视图中我们的预览容器,比如…

Postman进行Soap webservice接口测试

许多人认为Postman是高级REST客户端,Postman是处理通过HTTP发送的请求的工具。其实Postman也可以测试与协议无关的SOAP webservice api接口。 要使用Postman发出SOAP请求,请执行以下操作: 1、提供SOAP端点作为URL,可以使用SOAP的W…

Vue入门六(前端路由的概念与原理|Vue-router简单使用|登录跳转案例|scoped样式)

文章目录 前要:前端路由的概念与原理1)什么是路由2)SPA与前端路由3)什么是前端路由4)前端路由的工作方式 一、Vue-router简单使用1)什么是vue-router2) vue-router 安装和配置的步骤① 安装 vue-router 包②…

第11章 GUI Page495~496 步骤三十一:另存为别的文件,为TrySaveFile()入参设置一些位操作

工程二 头文件中为TrySaveFile()入参设置一些位操作,修改一下TrySaveFile()的入参类型 修改TrySaveFile()的实现: 修改“保存”菜单项挂接事件响应函数: 修改“另存为”菜单项挂接事件响应函数

kylin集群反向代理(健康检查)

前面一篇文章提到了使用nginx来对kylin集群进行反向代理, kylin集群使用nginx反向代理-CSDN博客文章浏览阅读349次,点赞8次,收藏9次。由于是同一个集群的,元数据没有变化,所以,直接将原本的kylin使用scp的…