BigDecimal面试题

BigDecimal精度损失问题

因为计算机采用二进制处理数据,但是很多小数,如 0.1 的二进制是一个无线循环小数,而这种数字在计算机中是无法精确表示的。人们采用了一种通过近似值的方式在计算机中表示,于是就有了单精度浮点数和双精度浮点数等。作为单精度浮点数的 float 和双精度浮点数的 double,在表示小数的时候只是近似值,并不是真实值。当使用 BigDecimal (Double) 创建一个的时候,得到的 BigDecimal 是损失了精度的。

而使用一个损失了精度的数字进行计算,得到的结果也是不精确的。想要避免这个问题,可以通过 BigDecimal (String) 的方式创建 BigDecimal,这样的情况下,0.1 就会被精确的表示出来。其表现形式是一个无标度数值 1,和一个标度 1 的组合。

 

 

BigDecimal比较大小

BigDecimal 是一个非常好用的表示高精度数字的类,其中提供了很多丰富的方法。但是,他的 equals 方法使用的时候需要谨慎,因为他在比较的时候,不仅比较两个数字的值,还会比较他们的标度,只要这两个因素有一个是不相等的,那么结果也是 false、如果想要对两个 BigDecimal 的数值进行比较的话,可以使用 compareTo 方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值