面试官问我:你确定用了BigDecimal后,计算结果一定精确?

前言

过年了,年终奖也领完了,这不打算出去面试一波,看看自己在市场中的价值,于是我简单地做了波简历,然后去面试一波,结果谁知,第一个面试就差点碰壁了,面试官竟然问我BigDecimal这个类,可是我不慌,心中有料,内心不慌,于是轻松拿下了一波高薪offer

BigDecimal,这个类其实对于经常接触金融、电商、支付的猿猿来说不算陌生,我也还算是熟悉,我也经常用,但是很多时候我们只知道他的用法,并不知道他还有隐藏的细节

首先,这是java.math包中提供的一种可以用来进行更高精度运算的类型,相较于double、float这些类型来说,BigDecimal在和金额计算打交道应该说有着天然的优势,这个大家也很熟悉了,接下来我们一起来分析下BigDecimal中的哪些注意事项

1、BigDecimal不能使用equals方法做等值比较

2、BigDecimal使用double初始化时存在精度风险

面试官问我:你确定用了BigDecimal后,计算结果一定精确?

问题一

这个问题其实真的是很细节了,不知道大家有没有注意到,在《阿里巴巴Java开发手册》中其实也有注明

面试官问我:你确定用了BigDecimal后,计算结果一定精确?

不知道你们在比较BigDecimal的时候都是怎么使用的,但是千万不要用==这种方式来使用哦,这个应该不用多说吧,BigDecimal属于对象,不是基本类型,不能用==来比较

一般说到这里,大家就知道了,对象的话肯定使用equals来进行比较咯,这样就没问题了,告诉你,用equals比较也有问题

你个渣,我怀疑你在骗我,那你告诉我为何,还有怎么解决?

那我该如何比较呢,自定义个类,继承BigDecimal,重写equals,当然可以。但是其实有更好的办法,在BigDecimal内部提供了compareTo方法买这个方法可以直接判断两个数字的值,相等则返回0

知其然,也要知其所以然,我肯定会解释清楚的嘞

我们来看个例子:

  BigDecimal bigDecimal1 = new Bi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值