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)
上一篇 2022年5月21日 下午9:00
下一篇 2022年5月21日 下午9:00


相关推荐

  • IMDG

    IMDG将内存作为首要存储介质不是什么新鲜事儿,在对主存的使用上,内存数据网格(InMemoryDataGrid,IMDG)与IMDB类似,但二者在架构上完全不同。IMDG特性可以总结为以下几点:数据

    2022年8月2日
    7
  • MVC框架详解(资源整理)

    MVC框架详解(资源整理)一、什么是MVC?二、SpringMVC流程图详解三、简单例子四、常用注解总结五、MVC优点与不足

    2022年6月22日
    30
  • js判断是否为数组的方法小结

    js判断是否为数组的方法小结一 判断是否为数组的方法 1 typeof 首先我们会想到的是使用 typeof 来检测数据类型 但是对于 Function String Number Undefined 等这几种基本类型来说 使用 typeof 来检测都可以检测到 比如代码如下 functiontest console log typeof1 numberconsol log typeoftest

    2026年3月18日
    1
  • Ubuntu20.04安装cuda cudnn pytorch pycharm记录

    Ubuntu20.04安装cuda cudnn pytorch pycharm记录Ubuntu20.04安装cudacudnnpytorchpycharm记录0.安装NVIDIA驱动1.安装cuda(1)查看pytorch支持的cuda版本。(2)下载cuda安装包并安装2.安装cudnn3.安装Anaconda(略)4.conda换源、建立环境、pip换源(1)conda换源(2)建立conda环境(3)pip换源5.在环境中安装pytorch6.安装pycharm记录时间:2021年1月31日版本:Ubuntu20.04、cuda11.0、cudnn对应的版本、pytorc

    2025年7月27日
    4
  • lombok插件失效原因_lombok插件下载

    lombok插件失效原因_lombok插件下载昨晚项目出了个小问题,lombok插件失效了。由于使用了lombok的@Data注解生成实体类的getter和setter,项目运行时所有的使用getter和setter方法的地方全都报错。看了网上的解决方案,一个一个试,发现没有一个能解决我的问题最后,我发现在pom.xml文件里面的<build></build>里面缺少了lombok的部分,把他加上即可<build><plugins><plugin

    2025年8月30日
    12
  • layoutparams方法_layoutinflater是什么

    layoutparams方法_layoutinflater是什么http://www.2cto.com/kf/201606/514962.html在上一篇文章里,我总结了一下自定义控件需要了解的基础知识:View的绘制流程——《自定义控件知识储备-View的绘制流程》。其中,在View的测量流程里,View的测量宽高是由父控件的MeasureSpec和View自身的LayoutParams共同决定的。MeasureSpec是什么,上一篇文章里已经说

    2026年2月6日
    6

发表回复

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

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