我是靠谱客的博主 纯情画笔,最近开发中收集的这篇文章主要介绍new Bigdecimal(double) 和 Bigdecimal.valueof()和BigDecimal(String)的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
参数类型为double的构造方法的结果有一定的不可预知性。
有人可能认为在Java中写入newBigDecimal(0.1)所创建的BigDecimal正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1000000000000000055511151231257827021181583404541015625。
这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
- BIgDecimal(double):当double必须用作BigDecimal的源时,请注意,此构造方法提供了一个准确转换之后,才用Double.toString(double)方法,然后使用BigDecimal(String)构造方法。
- BIgDecimal.valueof(double) 这个方法没有提供准确转换,而是直接是用Double.toString(double)方法,然后使用BigDecimal(String)构造方法,所以这个方法可用。
- BigDecimal(String) :这个一看就看出来了,直接就使用BigDecimal(String)构造方法了,这个是最好的。
注意BigDecimal的重载
总结:推荐使用BigDecimal.valueof(String) 和 BigDecimal(String) 这两个方法,不会出现精度的问题。
最后
以上就是纯情画笔为你收集整理的new Bigdecimal(double) 和 Bigdecimal.valueof()和BigDecimal(String)的问题的全部内容,希望文章能够帮你解决new Bigdecimal(double) 和 Bigdecimal.valueof()和BigDecimal(String)的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复