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前一位数的奇偶性来判断是否需要进位,奇数进位,偶数舍去。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

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