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

news2025/7/13 20:33:29

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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主动学习基础-贝叶斯神经网络

引言 传统的深度神经网络一般都有过度自信的问题。 即使我给神经网络提供一个从来没有训练过的类别图像,神经网络也会输出一个类别。比如训练猫狗的分类器,如果你抛出一个人的图像,网络也会将其分类为猫或者狗。 在几乎所有现实世界的问题中…

详解java中ArrayList

目录 前言 一、ArrayList是什么 二、ArrayList使用 1、ArrayList的构造 2 、ArrayList常见操作 3、 ArrayList的遍历 4、 ArrayList的扩容机制 三、来个练习 前言 当你看到这篇文章我觉得很好笑,因为我开始也不懂ArrayList现在轮到你了,嘻嘻嘻&am…

深入解析HubSpot在线客户互动工具:提升客户体验的利器

在数字化时代,客户体验成为企业成功的关键因素之一。HubSpot作为一体化的市场营销、销售和服务平台,其在线客户互动工具扮演着提升客户体验的重要角色。本文将深入探讨HubSpot的在线客户互动工具,包括实时聊天、机器人和社交媒体监控&#xf…

视频号的视频怎么提取?推荐2种方法让广告人下载高清原视频变得更轻松

​在当今这个视觉主导的时代,身为一名广告人,您是否经常还在烦恼视频号的视频怎么提取?并能快速、高效地下载到高质量的原视频素材而头疼呢? 视频号提取助手 现在,问题有了答案——"视频号提取助手"这款神…

【K8S 存储卷】K8S的存储卷+PV/PVC

目录 一、K8S的存储卷 1、概念: 2、挂载的方式: 2.1、emptyDir: 2.2、hostPath: 2.3、NFS共享存储: 二、PV和PVC: 1、概念 2、请求方式 3、静态请求流程图: 4、PV和PVC的生命周期 5、…

怎样无货源开网店?2024抖店最新开通和运营教程,小白必看!

我是王路飞。 无货源模式因为对货源没有要求,也算是新手小白入局电商平台唯一的模式选择了。 那么怎么开通无货源网店呢?以抖店举例。 2024抖店最新的开通和运营教程分享如下,小白必看! 内容来源于【醒醒团队-电商王路飞】 无…

如何正确选择ESD保护二极管

ESD保护二极管是一种齐纳二极管,专门用来保护电路免受过压浪涌,特别是静电放电(ESD)事件的影响。 当二极管反向偏置时,有很少的电流从阴极流向阳极。然而,当反向偏压超过某一点(称为反向击穿电压…

【动态规划】【 数学】C++算法:514自由之路

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 动态规划 数学 力扣514 自由之路 电子游戏“辐射4”中,任务 “通向自由” 要求玩家到达名为 “Freedom Trail Ring” 的金属表盘,并使用表盘拼写特定关键词才能开门。 给定一个字符串 ring &#x…

APP备案流程

一、 APP备案是指 自2000年起,依据《互联网信息服务管理办法》(国务院令第292号)规定,电信主管部门对从事互联网信息服务的网站开展备案核准工作(即ICP备案)。经过20多年的持续优化完善,已形成“电信主管部门-网络接入服务提供者-互联网信息…

八. 实战:CUDA-BEVFusion部署分析-spconv原理

目录 前言0. 简述1. 举例分析spconv的计算流程2. 导出带有spconv网络的onnx需要考虑的事情总结下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第八章——实战&a…

JavaWeb- Tomcat

一、概念 老规矩,先看维基百科:Apache Tomcat (called "Tomcat" for short) is a free and open-source implementation of the Jakarta Servlet, Jakarta Expression Language, and WebSocket technologies.[2] It provides a "pure Ja…

什么是广告联盟?国内哪些广告联盟?广告联盟如何赚取收益?

开发者想要对接广告联盟获得广告变现收益,就要了解广告联盟的优势,以及广告联盟是如何获取收益的。 一、什么是广告联盟? 广告联盟是一种在线广告服务模式,将广告主和流量主联系在一起。通过广告联盟平台的技术服务,…

自动驾驶HWP的功能定义

一、功能定义 高速路自动驾驶功能HWP是指在一般畅通高速公路或城市快速路上驾驶员可以放开双手双脚,同时注意力可在较长时间内从驾驶环境中转移,做一些诸如看手机、接电话、看风景等活动,该系统最低工作速度为60kph。 如上两种不同环境和速度…

c++基础 易道云笔记

c基础语法 编程快捷操作使用方法 反汇编: 先设置一个断点,调试后,在调试菜单中选择窗口,选择反汇编 **单词替换:**先按下ctrlf查找,再替换 基础知识辨析 1.数组指针 int (*ptest)[5] {} //该…

sqlilabs第四十九五十关

Less-49(GET - Error based - String Bind - ORDER BY CLAUSE) 手工注入 无回显(还是单引号闭合),只能使用延时注入 自动脚本 和上一关一样 Less-50(GET - Error based - ORDER BY CLAUSE -numeric- Stacked injection) 手工注入 这里需要使用堆叠注入的思路 自…

React07-路由管理器react-router-dom(v6)

react-router 是一个流行的用于 React 应用程序路由的库。它使我们能够轻松定义应用程序的路由,并将它们映射到特定的组件,这样可以很容易地创建复杂的单页面应用,并管理应用程序的不同视图。 react-router 是基于 React 构建的,…

谈谈Spring Bean

一、IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期。也就是管理对象和依赖,以及依赖的注入等等。 Spring 提供…

重学MySQL之关系型数据库和非关系型数据库

1 关系型数据库 1.1 关系型数据库的特性 1.1.1 事务的特性 事务,是指一个操作序列,这些操作要么都执行,或者都不执行,而且这一序列是无法分隔的独立操作单位。也就是符合原子性(Atomicity)、 一致性&…

C语言——结构体类型(二)【结构体内存对齐,结构体数组】

📝前言: 上一讲结构体类型(一)中,我们讲述了有关结构体定义,创建,初始化和引用的内容,这一讲,我们进一步学习结构体的相关知识: 1,结构体内存对齐…

Delphi 11.3配置android环境

电脑安装dephi11.3的时候,勾选android sdk,但是软件安装好以后,还有问题 在Delphi—tool —options 里边,Deployment下SDKManager 中,看到SDk里边的感叹号,说明android sdk没有安装好 解决方法有2种 第一种…