Java 开发中容易被忽略、出错的细微之处

一句话说清楚 Java 中的 RoundingMode (舍入策略枚举)

首先请想象有这样一根X坐标轴:

负无穷 ----(-6)–(-5)–(-2)–(-1.1)–(-1) --> 0 --(1)–(1.1)–(2)–(5.5)–(6)----> 正无穷

  • RoundingMode.UP背向0的整数,即距离0更远的数。如:5.5=>6, 1.1=>2, -5.5=>-6, -1.1=>-2
  • DOWN朝向0的整数,即距离0更近的数。如:5.5=>5, 1.1=>1, -5.5=>-5, -1.1=>-1
  • CEILING朝向正无穷的整数,ceiling 也有天花板的意思。如:5.5=>6, 1.1=>2, -5.5=>-5, -1.1=>-1
  • FLOOR朝向负无穷的整数,floor 也有地板的意思。如:5.5=>5, 1.1=>1, -5.5=>-6, -1.1=>-2
  • HALF_UP 四舍五入。入时同 UP,舍时同DOWN。这样来理解,HALF 表示0.5时怎么办,UP表示用 UP 模式,即背向0的策略。所以,HALF_UP就是指0.5时用UP策略,其他情况,所有带 HALF_ 前缀的策略都有相同的逻辑,即大于一半时,用入(UP)策略,小于一半时,用舍(DOWN)的策略。
  • HALF_DOWN 四舍五不入,大于0.5才入,0.5时舍(DOWN)。入时同UP,舍时同DOWN
  • HALF_EVEN 0.5时朝向最近的偶数即偶整数。如:5.5 => 6, 2.5 => 2,其他情况该舍的舍该入的入,即 >0.5 入(UP),<0.5 舍(DOWN)。这个最有意思,因为可以最小化连续累加时的误差。也被称为“银行家算法”。

BigDecimal 是不可变的 (Immutable)

所以不用担心你的 BigDecimal 对象被其他地方给修改了,如果要改变 BigDecimal 对象的状态,必定会创建一个新对象,例如你想改变 scale,那么必须这样写

BigDecimal newDecimal = oldDecimal.setScale(2);
// 原来 oldDecimal 对象的状态并不会改变

ClassLoader 和 Class 的 getResource() 方法相比,有什么差异?

Class 的 getResource(String)ClassLoader 的 getResource(String) 方法都可以用来获取一个资源的 URL 路径,这二者的区别是 ClassLoader 的资源路径不能以 “/” 开头,因为从 ClassLoader 中装载资源被认为总是从根部开始的,不需要区分相对路径和绝对路径;而 Class 的资源路径需要区分相对路径和绝对路径,因此 “/abc.property” 和 “abc.property” 分别表示从类路径的根开始和从本类所在的包路径开始查找 abc.property 资源

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值