为什么java的BigDecimal也无法精准计算double类型吗?

qccxw
qccxw
qccxw
订阅者
2937
文章
0
粉丝
生活百科评论149字数 258阅读0分51秒阅读模式

不要使用double来构造一个BigDcimal对象。BigDecimal的构造函数有这么一段说明:

The results of this constructor can be somewhat unpredictable. One might assume that writing in Java creates a which is exactly equal to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625. This is because 0.1 cannot be represented exactly as a (or, for that matter, as a binary fraction of any finite length). Thus, the value that is being passed in to the constructor is not exactly equal to 0.1, appearances notwithstanding.The constructor, on the other hand, is perfectly predictable: writing creates a which is exactly equal to 0.1, as one would expect. Therefore, it is generally recommended that the String constructor be used in preference to this one.由于double本身是不精确的,如果使用double作为构造函数参数,也会导致BigDecimal对象不精确,比如使用浮点数0.1来构造一个BigDecimal对象,它的实际值为 0.1000000000000000055511151231257827021181583404541015625,所以,需要精确计算的场景,推荐使用String类型的构造函数。

总之,在需要精确浮点数计算的场景,不要在任何地方使用double,float类型的变量,应该使用String类型来创建BigDecimal.

 
  • 版权提示:非本站文章仅供存储任何法律责任由作者承担▷违法举报◁▷新闻不符◁▷我要投稿◁
    免责声明:部分内容来自用户上传发布或新闻客户端自媒体如有侵权请反馈站长处理
  • 原创转载:阅读转载说明>>> https://www.playezu.com/baike/shenghuo/weishenmejavadebigdecimalyewufajingzhunjisuandoubleleixinga.html
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证