BigDecimal勿用double构造

 我来答
濒危物种1718
2022-07-19 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7377
采纳率:100%
帮助的人:56.5万
展开全部

大家都知道在基本数据类型中,操作运算(+、-、 、/)多多少少都会存在精度丢失的问题,所以我们会用一种保存精度更高的类来替代,那就是 BigDecamal *。

图上标记的就是现在用的就是比较多的构造了,其次就是普通运算操作符(+、-、*、/)方法

以上就是源码中提供的运算操作方法,具体更多的读者可自行阅读源码。
说了这么多,下面就说下本文的标题吧,为什么希望大家尽量不要使用double的构造参数呢?
这个坑就要从我查阅网上的文章说起了,比较了几篇文章,其中发现他们在对Bigdecimal参数的使用方法都不同,如下:

_ ,细心的读者或许已经发现了,toString()和valueOf()这两者的区别,初一看,没问题嘛,前面不是说了吗?BigDecimal不是支持double或string的构造参数么。下面我们就来看看区别在哪里?

3.toString()和valueOf()的区别
从源码来看,返回参数的类型虽然不同,但毕竟是符合BigDecimal的构造的

OK,下面通过一个例子来证明下:

运行的结果如下:

为什么add的结果不是0.07呢?答案就是在BigDecimal的double构造方法上一段注释中有这么一段话:

这就可以很好的解释为什么不使用doubleg构造的原因了。当时要想使用也还是有办法的,添加一个setScale方法(保留小数点位数)即可。

好了,文章到此结束了,其实内容很简单,主要是看自己是否细心,另外说一句网上的例子最好自己实践下,否则会有什么坑在那都不知道呢!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式