
BigDecimal勿用double构造
大家都知道在基本数据类型中,操作运算(+、-、 、/)多多少少都会存在精度丢失的问题,所以我们会用一种保存精度更高的类来替代,那就是 BigDecamal *。
图上标记的就是现在用的就是比较多的构造了,其次就是普通运算操作符(+、-、*、/)方法
以上就是源码中提供的运算操作方法,具体更多的读者可自行阅读源码。
说了这么多,下面就说下本文的标题吧,为什么希望大家尽量不要使用double的构造参数呢?
这个坑就要从我查阅网上的文章说起了,比较了几篇文章,其中发现他们在对Bigdecimal参数的使用方法都不同,如下:
_ ,细心的读者或许已经发现了,toString()和valueOf()这两者的区别,初一看,没问题嘛,前面不是说了吗?BigDecimal不是支持double或string的构造参数么。下面我们就来看看区别在哪里?
3.toString()和valueOf()的区别
从源码来看,返回参数的类型虽然不同,但毕竟是符合BigDecimal的构造的
OK,下面通过一个例子来证明下:
运行的结果如下:
为什么add的结果不是0.07呢?答案就是在BigDecimal的double构造方法上一段注释中有这么一段话:
这就可以很好的解释为什么不使用doubleg构造的原因了。当时要想使用也还是有办法的,添加一个setScale方法(保留小数点位数)即可。
好了,文章到此结束了,其实内容很简单,主要是看自己是否细心,另外说一句网上的例子最好自己实践下,否则会有什么坑在那都不知道呢!