详解Java中Math.round()的取整规则
作者:shruber 发布时间:2022-10-20 14:22:01
标签:Java,Math.round(),取整
做Java的面试题时遇到了以下这题,百度了一下Math.round()的修约规则,有的说是四舍五入,有的说是四舍六入,发现和我学分析化学时用的数字修约规则(四舍六入五成双)很像,所以验证一下;
原题:Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
作者给的解题方法如下:
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。
先说结论,题目作者给的解释是对的,后来找了该方法的定义,结果方法的定义就是这个原理,果然看文档才是王道;
round方法:
static long round(double a)
此方法返回的参数最接近的long.
static int round(float a)
此方法返回的参数最接近的整数.
注:四舍六入五成双:
当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,”六”是指≥6时进上,”五”指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
以下只论证static int round(float a)
//四舍
int[] test1 = {
Math.round(2.40f),
Math.round(2.44f),
Math.round(2.45f),
Math.round(2.46f),
Math.round(-2.40f),
Math.round(-2.44f),
Math.round(-2.45f),
Math.round(-2.46f),
Math.round(3.40f),
Math.round(3.44f),
Math.round(3.45f),
Math.round(3.46f),
Math.round(-3.40f),
Math.round(-3.44f),
Math.round(-3.45f),
Math.round(-3.46f)};
for(int i = 0; i< test1.length; i++)
{
System.out.print(test1[i]+",");
}
//输出:2,2,2,2,-2,-2,-2,-2,3,3,3,3,-3,-3,-3,-3,符合四舍;也符合 加0.5,进行下取整;
//六入
int[] test2 = {
Math.round(2.60f),
Math.round(2.64f),
Math.round(2.65f),
Math.round(2.66f),
Math.round(-2.60f),
Math.round(-2.64f),
Math.round(-2.65f),
Math.round(-2.66f),
Math.round(3.60f),
Math.round(3.64f),
Math.round(3.65f),
Math.round(3.66f),
Math.round(-3.60f),
Math.round(-3.64f),
Math.round(-3.65f),
Math.round(-3.66f)};
for(int i = 0; i< test2.length; i++)
{
System.out.print(test2[i]+",");
}
//输出:3,3,3,3,-3,-3,-3,-3,4,4,4,4,-4,-4,-4,-4,符合六入;也符合 加0.5,进行下取整;
//五成双之五后无数字
int[] test3 = {
Math.round(2.5f),
Math.round(-2.5f),
Math.round(3.5f),
Math.round(-3.5f)};
for(int i = 0; i< test3.length; i++)
{
System.out.print(test3[i]+",");
}
//输出:3,-2,4,-3,不符合五成双;符合 加0.5,进行下取整;
//五成双之五后有数字(零,非零)
int[] test4 = {
Math.round(2.50f),
Math.round(2.51f),
Math.round(2.59f),
Math.round(-2.50f),
Math.round(-2.51f),
Math.round(-2.59f),
Math.round(3.50f),
Math.round(3.51f),
Math.round(3.59f),
Math.round(-3.50f),
Math.round(-3.51f),
Math.round(-3.59f),
};
for(int i = 0; i< test4.length; i++)
{
System.out.print(test4[i]+",");
}
//输出:3,3,3,-2,-3,-3,4,4,4,-3,-4,-4,不符合五后非零进一;符合 加0.5,进行下取整;
//结论:Math.round()的取整规则不符合四舍六入五成双,以上案例符合 加0.5,进行下取整;
来源:https://blog.csdn.net/shruber/article/details/78413706


猜你喜欢
- 注解@Validated和BindingResult对入参非空校验在项目当中少不了入参校验,服务器和浏览器互不信任,不能因为前端加入参判断了
- 1.固定大小的线程池简介线程池就是在程序启动的时候先建立几个可以使用的线程放在那里,然后等着具体的任务放进去,这个任务基本可以说都是Runn
- 被覆盖比较好理解,类似于多态的实现,访问时通过类方法表来访问,你实际是什么类型,访问的方法就是那个类型的方法而不会是你的父类的方法。被隐藏是
- 测试springboot项目出现Test Ignored今天在写springBoot项目运行测试类时出现了以下问题:Test ignored
- FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。ffmpeg命令参数如下:通用选项-L license
- 1.介绍关机闹钟为Android中默认支持的功能,实现起来则需要满足一定的条件:自动开机、开机后响铃。对于自动开机来说,自动关机可以在应用层
- 注解从java5开始加入这一特性,发展到现在已然是遍地开花,在很多框架中得到了广泛的使用,用来简化程序中的配置。那充满争议的类型注解究竟是什
- *res/raw和assets的相同点:1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。*res/raw和as
- 本文实例为大家分享了Android实现毛玻璃效果弹出菜单动画的具体代码,供大家参考,具体内容如下仿ios上屏幕下方向上滑出来的一个模糊菜单,
- 大多数的B2C商城项目都会有限时活动,当用户下单后都会有支付超时时间,当订单超时后订单的状态就会自动变成已取消 ,这个功能的实现
- 本文实例讲述了Java网络编程实现的简单端口扫描器。分享给大家供大家参考,具体如下:在计算机网络的学习中,不由得觉得这门课的零碎知识点异常之
- 前言作为一个写java的使用最多的轻量级框架莫过于spring,不管是老项目用到的springmvc,还是现在流行的springboot,都
- 前言String可以说是Java中使用最多最频繁、最特殊的类,因为同时也是字面常量,而字面常量包括基本类型、String类型、空类型。一.
- XML对开发者来说十分的方便,不仅使用起来简单,而且能够及时调试,修改界面之后马上能看到效果。Java设置布局不具有这个优势。但是java却
- Comparable 比较器,内置定义的比较方法,实现比较 较简单Comparator 策略模式,需要定义不同的策略和比较的对象,实现比较
- IDEA快速创建getter和setter方法找到generate我的是Mac,右击鼠标就可以打开,相信windows也不难。选择gette
- 在我们的程序当中如果要实现类似《360软件管家》的功能,就要解决两个问题,首先是要判断该程序已有一个实例在运行,其次是要将已运行的应用程序实
- 功能:通过响应UI Textbox 的值向ListView 绑定新添加的纪录。UI XAML 代码<Grid Margin="
- 什么是NPOI?NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行
- 由于一个线程的程序,如果调用一个功能是阻塞的,那么就会影响到界面的更新,导致使用人员操作不便。所以往往会引入双线程的工作的方式,主线程负责更