语法-Java四舍五入等详解

文章详细介绍了Java中进行四舍五入操作的方法,包括Math.round()函数的基本使用,以及BigDecimal类提供的多种舍入策略,如ROUND_UP、ROUND_DOWN、ROUND_CEILING、ROUND_FLOOR和ROUND_HALF_UP等。推荐在需要精确控制小数位数的场景下使用BigDecimal。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java四舍五入等详解

一、Math.round()

  • long round(double d)
  • int round(float f)

​ Math.round()是Java中经典的舍入数字方法,它返回的是整数,也就是说对浮点数四舍五入成整数。

public class Main(){
    public static void main(){
        double d = 100.34;
        double e = 100.500;
        float f = 144;
        float g = 90f;
        
        System.out.println(Math.round(d));
        System.out.println(Math.round(e));
        System.out.println(Math.round(f));
        System.out.println(Math.round(g));
    }
}
结果:
100
101
144
90

二、BigDecimal

​ Java的最佳实践是优先使用BigDecimal而不是Math.round()来对Java的数字进行四舍五入。每当需要将数字四舍五入到小数点后n位时,首先考虑BigDecimal。

  • round.up

    • 远离零方向舍入,向绝对值最大的方向舍入,只要舍弃位非O即进位。
//round.up
BigDecimal bigDecimal3 = new BigDecimal("2.123").setScale(1, BigDecimal.ROUND_UP);
BigDecimal bigDecimal4 = new BigDecimal("2.163").setScale(1, BigDecimal.ROUND_UP);
System.out.println("2.123=>"+bigDecimal3+"\t2.163=>"+bigDecimal4);//2.123=>2.2,2.163=>2.2
  • round.down

    • 趋向零方向舍入,向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
//round.down
BigDecimal bigDecimal5 = new BigDecimal("2.123").setScale(1, BigDecimal.ROUND_DOWN);
BigDecimal bigDecimal6 = new BigDecimal("2.163").setScale(1, BigDecimal.ROUND_DOWN);
System.out.println("2.123=>"+bigDecimal5+"\t2.163=>"+bigDecimal6);//2.123=>2.1,2.163=>2.1
  • round.ceiling

    • 向正无穷方向舍入,向正最大方向靠拢。
//round.ceiling
BigDecimal bigDecimal7 = new BigDecimal("2.12").setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal bigDecimal8 = new BigDecimal("2.19").setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal bigDecimal9 = new BigDecimal("-2.12").setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal bigDecimal10 = new BigDecimal("-2.19").setScale(1, BigDecimal.ROUND_CEILING);
System.out.println("2.12=>"+bigDecimal7+"\t2.19=>"+bigDecimal8+"\t-2.12=>"+bigDecimal9+"\t-2.19=>"+bigDecimal10);
//2.12=>2.2	2.19=>2.2	-2.12=>-2.1	-2.19=>-2.1
  • round.floor

    • 向负无穷方向舍入,向负无穷方向靠拢。
//round.floor
BigDecimal bigDecimal11 = new BigDecimal("2.12").setScale(1, BigDecimal.ROUND_FLOOR);
BigDecimal bigDecimal12 = new BigDecimal("2.19").setScale(1, BigDecimal.ROUND_FLOOR);
BigDecimal bigDecimal13 = new BigDecimal("-2.12").setScale(1, BigDecimal.ROUND_FLOOR);
BigDecimal bigDecimal14 = new BigDecimal("-2.19").setScale(1, BigDecimal.ROUND_FLOOR);
System.out.println("2.12=>"+bigDecimal11+"\t2.19=>"+bigDecimal12+"\t-2.12=>"+bigDecimal13+"\t-2.19=>"+bigDecimal14);
//2.12=>2.1	2.19=>2.1	-2.12=>-2.2	-2.19=>-2.2
  • round.half_up(经典四舍五入)

//round.half_up(经典四舍五入)
BigDecimal bigDecimal15 = new BigDecimal("2.12").setScale(1, BigDecimal.ROUND_HALF_UP);
BigDecimal bigDecimal16 = new BigDecimal("2.19").setScale(1, BigDecimal.ROUND_HALF_UP);
BigDecimal bigDecimal17 = new BigDecimal("-2.12").setScale(1, BigDecimal.ROUND_HALF_UP);
BigDecimal bigDecimal18 = new BigDecimal("-2.19").setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println("2.12=>"+bigDecimal15+"\t2.19=>"+bigDecimal16+"\t-2.12=>"+bigDecimal17+"\t-2.19=>"+bigDecimal18);
//2.12=>2.1	2.19=>2.2	-2.12=>-2.1	-2.19=>-2.2
  • round.half_down(五舍六入)

//round.half_down(五舍六入)
BigDecimal bigDecimal19 = new BigDecimal("2.15").setScale(1, BigDecimal.ROUND_HALF_DOWN);
BigDecimal bigDecimal20 = new BigDecimal("2.16").setScale(1, BigDecimal.ROUND_HALF_DOWN);
BigDecimal bigDecimal21 = new BigDecimal("-2.15").setScale(1, BigDecimal.ROUND_HALF_DOWN);
BigDecimal bigDecimal22 = new BigDecimal("-2.16").setScale(1, BigDecimal.ROUND_HALF_DOWN);
System.out.println("2.15=>"+bigDecimal19+"\t2.16=>"+bigDecimal20+"\t-2.15=>"+bigDecimal21+"\t-2.16=>"+bigDecimal22);
//2.15=>2.1	2.16=>2.2	-2.15=>-2.1	-2.16=>-2.2
  • round.unnecessary

    • 计算结果是精确的,不需要舍入模式。
//round.unnecessary
BigDecimal bigDecimal23 = new BigDecimal("2.1544").setScale( BigDecimal.ROUND_UNNECESSARY);
BigDecimal bigDecimal24 = new BigDecimal("2.1544444").setScale( BigDecimal.ROUND_UNNECESSARY);//只能精确到7位
System.out.println("2.1544=>"+bigDecimal23+"\t2.15444444=>"+bigDecimal24);

参考材料

Java四舍五入的3种常见方法(取整及保留小数)

java四舍五入

Java中,要对浮点数进行四舍五入,有几种常用的方法可以实现。首先,可以使用Math类中的round()方法。这个方法接受一个double类型的参数,并返回最接近参数的long类型值,即进行四舍五入。 另一种方法是使用BigDecimal类的setScale()方法来进行四舍五入。首先,将浮点数封装成BigDecimal对象,然后调用setScale()方法设置要保留的小数位数和舍入模式,最后使用doubleValue()方法将结果转回double类型。 还有一种方法是使用DecimalFormat类,通过设置格式化模板来实现四舍五入。可以使用setRoundingMode()方法设置舍入模式,然后使用format()方法将浮点数格式化为字符串,在使用parse()方法将字符串解析为浮点数。 总而言之,在Java中实现浮点数的四舍五入可以使用Math类的round()方法、BigDecimal类的setScale()方法以及DecimalFormat类的格式化和解析方法。具体使用哪种方法取决于具体的需求和场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java基础语法(浮点数四舍五入)](https://blog.csdn.net/weixin_44387652/article/details/120866306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [语法-Java四舍五入详解](https://blog.csdn.net/qq_44579321/article/details/129615305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [提供精 确的浮点数运算,包括加减乘除和四舍五入](https://download.csdn.net/download/weixin_44244991/11454556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值