详解java的四舍五入与保留位示例

发布时间 - 2026-01-11 02:54:18    点击率:

四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于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表示保留的位数 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java的四舍五入  # java中的四舍五入  # java  # 四舍五入  # java 四舍五入使java保留2位小数示例讲解  # java中DecimalFormat四舍五入用法详解  # java中的取整与四舍五入方法实例  # Java取整与四舍五入  # java 四舍五入保留小数的实现方法  # Java四舍五入时保留指定小数位数的五种方式  # Java DecimalFormat 保留小数位及四舍五入的陷阱介绍  # 关于java四舍五入方法的基础学习  # Java中常见的几种四舍五入方法总结  # 舍去  # 类似于  # 在这里  # 两位  # 都是  # 这是  # 这个问题  # 的钱  # 若为  # 就会  # 加减乘除  # 有个  # 尤其是  # 都要  # 你要  # 浮点  # 是由  # 提出了  # 以此类推 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  jQuery 常见小例汇总  想要更高端的建设网站,这些原则一定要坚持!  如何用y主机助手快速搭建网站?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何挑选高效建站主机与优质域名?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Python并发异常传播_错误处理解析【教程】  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何处理异常和错误?(Handler示例)  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel如何实现文件上传和存储?(本地与S3配置)  C#如何调用原生C++ COM对象详解  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Linux系统运维自动化项目教程_Ansible批量管理实战  linux top下的 minerd 木马清除方法  手机网站制作与建设方案,手机网站如何建设?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  如何在 React 中条件性地遍历数组并渲染元素  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Windows Hello人脸识别突然无法使用  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  android nfc常用标签读取总结  Firefox Developer Edition开发者版本入口  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  Laravel定时任务怎么设置_Laravel Crontab调度器配置  如何利用DOS批处理实现定时关机操作详解  如何在宝塔面板创建新站点?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  java获取注册ip实例  高性价比服务器租赁——企业级配置与24小时运维服务  javascript日期怎么处理_如何格式化输出  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  *服务器网站为何频现安全漏洞?