`
luiyue921
  • 浏览: 60669 次
文章分类
社区版块
存档分类
最新评论

java那些小事---java的四舍五入

 
阅读更多

Java小事非小事!!!!!!!!!!!!

      四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了。在讲解之间我们先看如下一个经典的案例:

复制代码
public static void main(String[] args) {
        System.out.println("12.5的四舍五入值:" + Math.round(12.5));
        System.out.println("-12.5的四舍五入值:" + Math.round(-12.5));
    }
Output:
12.5的四舍五入值:13
-12.5的四舍五入值:-12
复制代码

 

      这是四舍五入的经典案例,也是我们参加校招时候经常会遇到的(貌似我参加笔试的时候遇到过好多次)。从这儿结果中我们发现这两个绝对值相同的数字,为何近似值会不同呢?其实这与Math.round采用的四舍五入规则来决定。

      四舍五入其实在金融方面运用的非常多,尤其是银行的利息。我们都知道银行的盈利渠道主要是利息差,它从储户手里收集资金,然后放贷出去,期间产生的利息差就是银行所获得的利润。如果我们采用平常四舍五入的规则话,这里采用每10笔存款利息计算作为模型,如下:

      四舍:0.000、0.001、0.002、0.003、0.004。这些舍的都是银行赚的钱。

      五入:0.005、0.006、0.007、0.008、0.009。这些入的都是银行亏的钱,分别为:0.005、0.004、.003、0.002、0.001。

      所以对于银行来说它的盈利应该是0.000 + 0.001 + 0.002 + 0.003 + 0.004 - 0.005 - 0.004 - 0.003 - 0.002 - 0.001 = -0.005。从结果中可以看出每10笔的利息银行可能就会损失0.005元,千万别小看这个数字,这对于银行来说就是一笔非常大的损失。面对这个问题就产生了如下的银行家涉入法了。该算法是由美国银行家提出了,主要用于修正采用上面四舍五入规则而产生的误差。如下:

      舍去位的数值小于5时,直接舍去。

      舍去位的数值大于5时,进位后舍去。

      当舍去位的数值等于5时,若5后面还有其他非0数值,则进位后舍去,若5后面是0时,则根据5前一位数的奇偶性来判断,奇数进位,偶数舍去。

      对于上面的规则我们举例说明

         11.556 = 11.56          ------六入

         11.554 = 11.55          -----四舍

         11.5551 = 11.56         -----五后有数进位

         11.545 = 11.54          -----五后无数,若前位为偶数应舍去

         11.555 = 11.56          -----五后无数,若前位为奇数应进位

      下面实例是使用银行家舍入法:

复制代码
public static void main(String[] args) {
        BigDecimal d = new BigDecimal(100000);      //存款
        BigDecimal r = new BigDecimal(0.001875*3);   //利息
        BigDecimal i = d.multiply(r).setScale(2,RoundingMode.HALF_EVEN);     //使用银行家算法 
        
        System.out.println("季利息是:"+i);
        }
Output:
季利息是:562.50
复制代码

      在上面简单地介绍了银行家舍入法,目前java支持7中舍入法:

      1、 ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。

      2、 ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。

     3、 ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于ROUND_UP,若为负数,舍入行为类似于ROUND_DOWN。Math.round()方法就是使用的此模式。

      4、 ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。

      5、 HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。

      6、 HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。

      7、 HAIL_EVEN:银行家舍入法。

      提到四舍五入那么保留位就必不可少了,在java运算中我们可以使用多种方式来实现保留位。

保留位

    方法一:四舍五入

double   f   =   111231.5585;
BigDecimal   b   =   new   BigDecimal(f);
double   f1   =   b.setScale(2,   RoundingMode.HALF_UP).doubleValue();

       在这里使用BigDecimal ,并且采用setScale方法来设置精确度,同时使用RoundingMode.HALF_UP表示使用最近数字舍入法则来近似计算。在这里我们可以看出BigDecimal和四舍五入是绝妙的搭配。

     方式二:

java.text.DecimalFormat   df   =new   java.text.DecimalFormat(”#.00″);
df.format(你要格式化的数字);

   例:new java.text.DecimalFormat(”#.00″).format(3.1415926)

      #.00 表示两位小数 #.0000四位小数 以此类推…

     方式三: 

 

double d = 3.1415926;

String result = String .format(”%.2f”);

%.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型。

        方式四: 

      此外如果使用struts标签做输出的话,有个format属性,设置为format="0.00"就是保留两位小数

      例如:

复制代码
<bean:write name="entity" property="dkhAFSumPl"  format="0.00" />

或者

<fmt:formatNumber type="number" value="${10000.22/100}" maxFractionDigits="0"/>

maxFractionDigits表示保留的位数
复制代码
2
1
分享到:
评论
1 楼 lihc_sd0531 2013-10-14  
Good.

相关推荐

    分支限界法求解单源最短路径

    有很长时间没有上传了,主要是因为这些天出了些小事。这个是用分支限界法求解单源最短路径问题的算法。

    恋爱这件小事.doc

    恋爱这件小事.doc

    java定时器使用技巧

    java定时器使用技巧

    唯爱交友源码java-chenxiao-s-blog::books:以Springboot为主要技术栈搭建的精美博客(适合练手)

    唯爱交友源码java 沉晓's Blog 一、博客概述 :grapes: 项目背景 我一直追求着一种纯粹,写技术博客,就好好地写,心无旁骛。 我目前唯一写作的平台就是CSDN,身边也有一部分人写了一篇文章在各个平台都有发表,我不...

    java计算器程序.doc

    java 编写计算器的简单程序//一个较为简洁的巧妙的计算器程序, import java.io.*; import java.awt.event.*; import java.awt.*; //需要解决的问题,数学的运算都有正负号的出现,在点击等号的时候就会有冲突,...

    亚信java笔试题-InkYear:Flutter框架开发的轻量级生活记录应用

    亚信java笔试题 墨年(InkYear)软件项目开发文档 一、项目需求分析 1.1 开发背景 在生活节奏日渐加快的现代社会,“记录”的作用愈发凸显。定期对自己进行记录和自我审视,是观察自己的一种方式,从而达到了解自己...

    高分毕设-高分项目《基于Java实现智慧校园Android客户端及管理系统 》+源代码+文档说明

    本项目定位为主要面向全国高校学生人群 可供用户浏览校园内的资讯,如各类活动比赛公告,社团、机构、班级等团队发布的资讯,可以点赞、评论、分享资讯 方便用户记录生活、工作、学习上的大小事,好记性不如烂笔头,...

    ascii-art-table:java数据到ascii表

    ascii-art-表一种通过 java 将数据打印到 ascii 表的简单方法(没有太多配置可能性)小事这 ... AsciiArtTable aat = new AsciiArtTable ();aat . addHeaderCols( " some " , " foo " );aat . addHeaderCols( " bar ...

    java笔试题算法-clean-code:RobertC.Martin编写的CleanCode-AHandbookofAgileSoftwar

    java笔试题算法干净的代码 Robert C. Martin 编写的 Clean Code - A Handbook of Agile Software Craftsmanship 一书的注释 指数 小事很重要。 上帝在细节中。 我们所做的 80% 或更多的事情被古怪地称为“维护”:...

    java笔试题算法-blog:https://chanshiyu.com

    java笔试题算法README 蝉时雨 Code is Long, Life is Short. まだ五里雾中です。 目录 描述 时雨 日常博文,记录自己工作与生活中的那点小事 前端 前端知识库,包括且不限于JavaScript、TypeScript、Nodejs、React、...

    励志程序员

    这篇小记主要记载了“零点软件开发团队”从开始准备软件设计大赛,到后来软件设计成功的过程中,发生的一些比较有意思或令人有所思的生活小事。小记以作者我为主线进行慢慢展开,小记中的老曹,老陈,美工姜,美工...

    SetupSTM32CubeMX-6.1.1.exe

    CubeMX的安装程序,此外CubeMX需要在JAVA的环境下才能运行java可以在CSDN上搜索jdk-8u102-windows-x64.exe,你可以找到相应的下载程序,安装都是小事。只有CubeMX要注意不要安装在中文路径之下,且Windows用户名最好...

    Tomcat内存溢出的三种情况及解决办法分析

    有一点需要注意:java -Xmx***M version 命令来测试的最大堆内存是 -Xmx与 -XX:PermSize的 和 比如系统支持最大的jvm堆大小事1.5G,那 -Xmx1024m -XX:PermSize=768M 是无法运行的。 第三种:无法创建新的线程。 ...

    使用 Artemis Entity Framework、Libgdx 和 Box2D 编写的 简单游戏_java_代码_下载

    直升机游戏 在我的空闲时间用不到 3 天的时间写。我写它是因为我在网络上找不到任何集成这三个框架的东西,我想知道如何做到这一点。它让我想到了很多不同的小事。

    Flex-超级学习资料集锦

    同时,在书籍中,Flex 书籍,本不多,更别说, 中文版的了,Flex 资料不同于 java ,多得一塌糊涂,书籍中,包含了,非常畅销的 《Flex 从入门到实践》 和 《Flex 从入门到精通》 ,这两本书 可以说是 Flex 中文书籍...

    bootcamp-refactoring

    她的演讲“所有的小事”( )是我们最喜欢的会议演讲之一。 这项练习将模糊地反映出她在演讲期间所展现出的才华。 我们已经尝试了她在演讲中讨论的想法和进步,并使它们适用于Java。 有些事情有所不同,因为Java是...

    smallstuff:有时,我们只是不需要大型、复杂、过度设计、昂贵的设施来完成开发系统所需的小事。 那些时候有小东西

    有时,我们只是不需要大型、复杂、过度设计、昂贵的设施来做小事。 在那个时候,有smallstuff ,这是一个由希望开发 Web 服务的小项目和其他小东西组成的努力,以解决定义明确的功能领域。 smallstuff目前的愿景是...

    使用FreeMarker替换JSP的10个理由

    你还在使用 Java 服务器页面(俗称JSP)吗?我曾经也是,但是几年前我抛弃了它们,并且再也没有用过JSP了。JSP 是个很好的概念,但是它却剥夺了 web 开发的乐趣。 对我而言,这些都是小事,比如无法在页面模板上使用...

    编程珠玑 第二版 修订版

    第5章 编程小事 43 5.1 从伪代码到C程序 43 5.2 测试工具 44 5.3 断言的艺术 46 5.4 自动测试 48 5.5 计时 49 5.6 完整的程序 50 5.7 原理 51 5.8 习题 51 5.9 深入阅读 52 5.10 调试(边栏) 53 第二...

    关于gradle你应该知道的一些小事

    当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。 通俗的理解:gradle是一种构建工具,我们可以用他来对多工程进行各种管理(依赖,打包,部署,发布,各种渠道的差异管理); 有些时候,我们会有...

Global site tag (gtag.js) - Google Analytics