如何在Java中将BigDecimal转换为Double?

168

如何在Java中将BigDecimal转换为Double? 我们有这样的需求:我们需要使用Double作为参数,但是我们得到的是BigDecimal,所以我必须将BigDecimal转换为Double


16
new BigDecimal(2).doubleValue()怎么样? - Matthias
6
在提出问题之前,请务必阅读文档,通常您会发现问题的答案已经在文档中有所涉及。参见doubleValue()。(提示:要查找特定类的文档,请使用类名+java的方式进行谷歌搜索。例如,要找到此文档,我搜索了“BigDecimal Java”) - Justin
1
我有一个需求,需要使用Double作为参数。请更改需求。如果不从头到尾使用BigDecimal,则使用它毫无意义。这个需求会影响准确性,可能会影响合规性,并可能构成可诉的疏忽。 - user207421
你为什么使用 Double 而不是 double。它是一个可以为 null 的字段吗? - Peter Lawrey
@EJP 使用 double 并不是那么糟糕,因为它具有15位以上的表示精度,这比大多数程序需要的要多,但我同意有时候使用BigDecimal没有意义,因为你更有可能添加错误/复杂性。 - Peter Lawrey
显示剩余2条评论
3个回答

318
你需要使用 doubleValue() 方法从 BigDecimal 对象中获取 double 值。
BigDecimal bd; // the value you get
double d = bd.doubleValue(); // The double you want

2
嗨,我使用了相同的方法,但问题是两个答案不同。我的十进制输出是13555261857.79,当转换为double时,它变成了1.355526185779E10。我该如何在将十进制转换为double后获得相同的输出? - CODAR747
1
@user13926345 - 两个值是相同的。只是第一个输出是该值的普通表示,而另一个是科学表示法 - Rahul
嗨,这对我有效...直接的解决方案。 - Mario Rojas

40
你可以使用.doubleValue()BigDecimal 转换为 double。但是,如果你进行货币操作,请不要使用它。应该直接在 BigDecimal 对象上执行。在这些计算中精度损失会成为与货币相关的计算中的大问题。

你能否举个例子描述一下问题? - Pushpak Jain

13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接