Java四舍五入保留小数点后几位

Java四舍五入保留小数点后几位(double)+Math.round返回double类型//案例:四舍五入保留小数点后1位doubled1=123.456;doubled2=654.321;doublev1=(double)Math.round(d1*10)/10;doublev2=(double)Math.round(d2*10)/10;System.out…

大家好,又见面了,我是你们的朋友全栈君。

  1. (double) + Math.round 返回double类型

    // 案例:四舍五入保留小数点后1位
    double d1 = 123.456;
    double d2 = 654.321;
    double v1 = (double) Math.round(d1 * 10) / 10;
    double v2 = (double) Math.round(d2 * 10) / 10;
    System.out.println(v1); // 123.5
    System.out.println(v2); // 654.3
    
  2. DecimalFormat 返回String类型,你可以设置四舍五入的模式,详见java.math.RoundingMode,提示:负数四舍五入时有不同的模式

    double d1 = 123.456;
    double d2 = 654.321;
    DecimalFormat decimalFormat = new DecimalFormat("#.#");
    decimalFormat.setRoundingMode(RoundingMode.UP);
    String format1 = decimalFormat.format(d1);
    System.out.println(format1);
    String format2 = decimalFormat.format(d2);
    System.out.println(format2);
    
  3. BigDecimal 返回double类型,可以设置四舍五入的模式,提示:负数四舍五入时有不同的模式。注意:BigDecimal#setScale方法返回一个新的BigDecimal对象!

    BigDecimal bigDecimal1 = new BigDecimal(d1);
    BigDecimal bigDecimal2 = new BigDecimal(d2);
    BigDecimal vbd1 = bigDecimal1.setScale(1, BigDecimal.ROUND_HALF_UP);
    BigDecimal vbd2 = bigDecimal2.setScale(1, BigDecimal.ROUND_HALF_UP);
    System.out.println(vbd1.doubleValue());
    System.out.println(vbd2.doubleValue());
    

Java支持七种舍入方式:

  1. ROUND_UP:远离零方向舍入。向远离0的方向舍入,也就是说,向绝对值最大的方向舍入,只要舍弃位非0即进位。
  2. ROUND_DOWN:趋向零方向舍入。向0方向靠拢,也就是说,向绝对值最小的方向输入,注意:所有的位都舍弃,不存在进位情况。
  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是进位的,而在HALF_DOWN中却是舍弃不进位。
  7. HALF_EVEN:银行家算法。
    在普通的项目中舍入模式不会有太多影响,可以直接使用Math.round方法,但在大量与货币数字交互的项目中,一定要选择好近似的计算模式,尽量减少因算法不同而造成的损失。

银行家算法:
四舍:舍弃的数值:0.000、0.001、0.002、0.003、0.004,因为是舍弃的,对银行家来说,就不用付款给储户了,那每舍弃一个数字就会赚取相应的金额:0.000、0.001、0.002、0.003、0.004。
五入:进位的数值:0.005、0.006、0.007、0.008、0.009,因为是进位,对银行家来说,每进一位就会多付款给储户,也就是亏损了,那亏损部分就是其对应的10进制补数:0.005、0.004、0.003、0.002、0.001。
因为舍弃和进位的数字是在0到9之间均匀分布的,所以对于银行家来说,每10笔存款的利息因采用四舍五入而获得的盈利是:

在这里插入图片描述
银行家舍入(Banker’s Round)的近似算法,其规则如下:

  1. 舍去位的数值小于5时,直接舍去;
  2. 舍去位的数值大于等于6时,进位后舍去;
  3. 当舍去位的数值等于5时,分两种情况:5后面还有其他数字(非0),则进位后舍去;若5后面是0(即5是最后一个数字),则根据5前一位数的奇偶性来判断是否需要进位,奇数进位,偶数舍去。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143350.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c#中int16 int32 int64区别[通俗易懂]

    c#中int16 int32 int64区别[通俗易懂]c#intInt32Int64的区别int16=short;int32=int;int64=long;Int16值类型表示值介于-32768到+32767之间的有符号整数。Int32值类型表示值介于-2,147,483,648到+2,147,483,647之间的有符号整数。Int64值类型表示值介于-9,223,372

    2022年8月15日
    3
  • 福利来了!手把手教你Python爬取女神套图

    福利来了!手把手教你Python爬取女神套图疲惫的生活里总要有些温柔梦想吧目标URL:http://www.win4000.com/meinvtag4_1.html爬取美桌网某个标签下的美女壁纸,点进详情页可以发现,里面是一组套图一、网页分析翻页查看URL变化规律:http://www.win4000.com/meinvtag4_1.htmlhttp://www.win4000.com/meinvtag4_2.htmlhttp://www.win4000.com/meinvtag4_3.htmlhttp:

    2025年11月16日
    5
  • luajit性能优化[通俗易懂]

    luajit性能优化[通俗易懂]本文转载地址:(http://www.cnblogs.com/zwywilliam/p/5992737.html)luajit是目前最快的脚本语言之一,不过深入使用就很快会发现,要把这个语言用到像宣称那样高性能,并不是那么容易。实际使用的时候往往会发现,刚开始写的一些小testcase性能非常好,经常毫秒级就算完,可是代码复杂度一上去了,动辄几十上百毫秒的情况就会出现,性能表现非常飘忽。

    2022年10月6日
    3
  • 国内免费CMS汇总[通俗易懂]

    国内免费CMS汇总[通俗易懂]CMS系统已经成为建站过程中必不可少的工具,现在已经基本看不到手工写成的HTML页面,这几年流行div+css建站,使得手写代码愈加不现实,CMS系统已经成为建站必备的支撑软件。CMS的发展和平台的演变是密切相关的,从最古老的CGI到ASP再到JSP、PHP、.NET,CMS也跟着不断推层出新,大家选择CMS一定要考虑平台,不然几年后可能会出大麻烦。ASP已经被微软淘汰,JSP太复杂难于上

    2022年10月11日
    2
  • java中的onresume_java – 直接onResume()调用的替代方法

    java中的onresume_java – 直接onResume()调用的替代方法我正在重写我的Android应用以消除对onResume()的直接调用.我的应用程序目前在onResume()内部完成大部分工作,然后发布显示,这是onResume()的结束.@OverridepublicvoidonResume(){super.onResume();//getcurrentdateandtime,//anddetermineifdaylightsav…

    2022年6月2日
    33
  • Java集合框架关系图谱

    Java集合框架关系图谱Java集合是用于存储数量不等的对象的容器,还可以保存具有映射关系的关联数组,Collection是集合接口,它提供了对集合对象进行基本操作的通用接口方法。Java集合大致分为下面四种类型:List,Set,Queue,Map。List代表有序,可重复集合,Set代表无序,不可重复集合,Queue代表队列集合,Map代表具有映射关系的集合。Java集合主要有Collection和Map接口派生,…

    2022年6月26日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号