在日常开发中经常会遇到数字的情况,有关数据的场景中会遇到取整的情况,java中提供了取整函数。看下java.lang.Math类中取整函数的用法。

一、概述

java.lang.Math类中有三个和取整相关的函数,分别是ceil()、floor()、round()方法。所谓取整就是舍弃小数位,保留整数位,但是如何舍弃和保留每个方法的处理方式不一样,看其具体用法。

二、详述

ceil()方法

ceil方法的作用是向上取整。下面看方法的定义,

接收一个double类型的参数,返回double类型。

正数情况

下面看参数为正数的情况,ceil是如何取整的,

package com.example.demo.test;

public class TestMathCeilPost {
public static void main(String[] args) { //定义double类型
double b=12.5;
double b2=12.1; //向上取整
double d=Math.ceil(b);
double d2=Math.ceil(b2);
//转化为int类型
int a=Double.valueOf(d).intValue();
int a2=Double.valueOf(d2).intValue(); System.out.println(b+"调用Math.ceil方法后的值为:"+a);
System.out.println(b2+"调用Math.ceil方法后的值为:"+a2); }
}

看执行结果,

通过上面的结果,可以看到在正数情况下是向上取整,也就是大于原始结果的最小的正数,

负数情况

看负数的情况,

package com.example.demo.test;

public class TestMathCeilNegative {
public static void main(String[] args) { //定义double类型
double b=-12.5;
double b2=-12.1; //向上取整
double d=Math.ceil(b);
double d2=Math.ceil(b2);
//转化为int类型
int a=Double.valueOf(d).intValue();
int a2=Double.valueOf(d2).intValue(); System.out.println(b+"调用Math.ceil方法后的值为:"+a);
System.out.println(b2+"调用Math.ceil方法后的值为:"+a2); }
}

看执行结果,

可以看出也是取大于给定数的最小的负整数。

floor()

ceil方法的作用是向下取整,看方法定义如下,

正数情况

看正数情况下,

package com.example.demo.test;

public class TestMathFloorPost {
public static void main(String[] args) { //定义double类型
double b=12.5;
double b2=12.1; //向下取整
double d=Math.floor(b);
double d2=Math.floor(b2);
//转化为int类型
int a=Double.valueOf(d).intValue();
int a2=Double.valueOf(d2).intValue(); System.out.println(b+"调用Math.floor方法后的值为:"+a);
System.out.println(b2+"调用Math.floor方法后的值为:"+a2);
}
}

看执行结果,

通过上面的结果,可以看到floor方法在正数情况下,是取小于给定数的最大的正数。

负数情况

看负数情况下,

package com.example.demo.test;

public class TestMathFloorNegative {
public static void main(String[] args) { //定义double类型
double b=-12.5;
double b2=-12.1; //向下取整
double d=Math.floor(b);
double d2=Math.floor(b2);
//转化为int类型
int a=Double.valueOf(d).intValue();
int a2=Double.valueOf(d2).intValue(); System.out.println(b+"调用Math.floor方法后的值为:"+a);
System.out.println(b2+"调用Math.floor方法后的值为:"+a2);
}
}

看执行结果,

通过上面的结果,可以看到floor方法在负数情况下,是取小于给定数的最大的正数。

round()

round方法的作用是“四舍五入”,看方法定义,

看到方法的入参有float、double,出参对应这int、long。以double为例。

正数情况

看正数的情况,

package com.example.demo.test;

public class TestMathRoundPost {
public static void main(String[] args) { //定义double类型
double b=12.5;
double b2=12.1; //向上取整
double d=Math.round(b);
double d2=Math.round(b2);
//转化为int类型
int a=Double.valueOf(d).intValue();
int a2=Double.valueOf(d2).intValue(); System.out.println(b+"调用Math.round方法后的值为:"+a);
System.out.println(b2+"调用Math.round方法后的值为:"+a2);
}
}

看执行结果,

看执行结果就是进行数学上的四舍五入运算,得到结果。

负数情况

看负数情况,

package com.example.demo.test;

public class TestMathRoundNegative {
public static void main(String[] args) { //定义double类型
double b=-12.6;
double b2=-12.1;
double b3=-12.5; double d=Math.round(b);
double d2=Math.round(b2);
double d3=Math.round(b3);
//转化为int类型
int a=Double.valueOf(d).intValue();
int a2=Double.valueOf(d2).intValue();
int a3=Double.valueOf(d3).intValue(); System.out.println(b+"调用Math.round方法后的值为:"+a);
System.out.println(b2+"调用Math.round方法后的值为:"+a2);
System.out.println(b3+"调用Math.round方法后的值为:"+a3);
}
}

看执行结果,

从上面的结果可以看到,在负数情况下不是简单的“四舍五入”,而要考虑XXX.5的情况,小数位上的数字小于等于5,舍弃小数位,保留整数位数;小数位上的数字大于5,舍弃小数位且加-1;

三、总结

本文分析了Math类中的ceil、floor、round函数,

ceil

正数和负数情况下都是向上取整,这里的向上指的是取大于给定数字的最小整数,例,ceil(12.3)-->13.0 ceil(-12.6)-->-12.0

floor

正数和负数情况下都是向下取整,这里的向下指的是取小于给定数字的最大整数,例,floor(12.3)-->12.0 floor(-12.6)-->-13.0

round

正数情况下是数学上的四舍五入,例,round(12.3)-->12 round(12.5)-->13

正数情况下需要注意小数位的数字,小于等于5,则舍去小数位;大于5,则加-1,例,round(-12.3)-->-12 round(-12.5)-->-12 round(-12.6)-->-13

有不正之处,欢迎指正,感谢!

java基础之二:取整函数(Math类)的更多相关文章

  1. JAVA基础(二)—— 常用的类与方法

    JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...

  2. Java从零开始学二十八(Math类和Random类)

    一.Math概述 提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率) 二.常用方法 package com.pb.demo1; public class MathTest { ...

  3. Java基础知识强化81:Math类random()方法之获取任意范围的随机数案例(面试题)

    1. 需求:设计一个方法,可以实现获取任意范围内的随机数 分析:使用方法random()如下: public static double random() 注:Returns a pseudo-ran ...

  4. Java基础知识强化80:Math类random()方法的小扩展(控制产生目的数字的概率)

    1. Math.random()方法: Math.random()出现的数据是0.0<= x < 1.0之间,随机出现一个数据Math.random()>0.1概率是0.9 那么如下 ...

  5. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  6. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  7. java基础(二章)

    java基础(二章) 一,变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 l  必须以字母.下划线 _ .美元符号 $ 开头 l  变量中,可以包括数字 l  变量中,不能出现特 ...

  8. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  9. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

随机推荐

  1. 总结distinct、group by 、row_number()over函数用法及区别

    distinct和group by 是一样的,查询去重,只能是全部重复的,也可以理解为针对单例,因为一行有一个字段不一样,他们就会认为这两行内容是不重复的.但是使用row_number()over这个 ...

  2. mysql 定时任务执行

    SET GLOBAL event_scheduler = ON; show variables like 'event_scheduler'; event_scheduler ON 创建event: ...

  3. Visual Studio2013应用笔记---WinForm事件中的Object sender和EventArgs e参数

    Windows程序有一个事件机制.用于处理用户事件. 在WinForm中我们经常需要给控件添加事件.例如给一个Button按钮添加一个Click点击事件.给TextBox文本框添加一个KeyPress ...

  4. strace 使用文档

    strace -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filenam ...

  5. DOS基本命令(Windows下的基本命令部分)

    一.cls(clear screen的简写) 命令作用:清屏屏幕 详细介绍:屏幕显示的所有字符信息都是存放在一个屏幕缓冲区中,cls命令的作用是清除屏幕上的文字,并将该缓冲区清空. 二.dir(dir ...

  6. Springboot 完整搭建快速入门,必看!

    前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发. Spr ...

  7. Caused by: java.lang.ClassNotFoundException: com.alibaba.druid.filter.logging.Log4j2Filter

    最开始遇到这个错误,百度,网上一堆的清一色解决方案,缺少log4j,引入log4j相关依赖,或者引入slf4j-over-log4j的依赖,但是好像都不行,最后还是谷歌靠谱,直接检索出github上的 ...

  8. 2020阿里Java面试题目大汇总,看看你离阿里还有多远,附答案!

    前言 首先说一下情况,我大概我是从去年12月份开始看书学习,到今年的6月份,一直学到看大家的面经基本上百分之90以上都会,我就在5月份开始投简历,边面试边补充基础知识等.也是有些辛苦.终于是在前不久拿 ...

  9. mac中怎么完成移动硬盘分区这个操作

    移动硬盘在出厂时只有一个区,不方便我们存储和查阅文件,移动硬盘分区可以防止硬盘发生错误,以免造成资料丢失,也可以防止产生无用文件. 移动硬盘基本上都是用Windows系统进行分区的,但是现在很多人使用 ...

  10. 手把手为大家演示fat32转ntfs操作过程,一看就会

    fat32和ntfs是两种我们较为常见的u盘或者硬盘格式.它们都有着各自的特点,但是相比之下,使用ntfs文件格式我们可以做出很多fat32不能实现的功能.在日常生活中,我们会面临到需要把fat32转 ...