Java 将BigDecimal.toPlainString()转换为double以执行算术运算

Java 将BigDecimal.toPlainString()转换为double以执行算术运算,java,double,bigdecimal,Java,Double,Bigdecimal,当我这样做时,我从数据库中获得以下值 resultSet.getdouble() 2.0006362409E9 我想对这个数字进行算术运算。 我尝试使用BigDecimal.toPlainString()获取实际值,然后得到以下值 2000636240.90000095367431640625 当我尝试将BigDecimal.toPlainString()转换为double时,我又得到了科学记数法中的值 我想将这个数字除以-我如何解决这个问题?执行计算时,不必转换为双精度 使用BigDecima

当我这样做时,我从数据库中获得以下值
resultSet.getdouble()

2.0006362409E9

我想对这个数字进行算术运算。 我尝试使用
BigDecimal.toPlainString()
获取实际值,然后得到以下值

2000636240.90000095367431640625

当我尝试将BigDecimal.toPlainString()转换为double时,我又得到了科学记数法中的值


我想将这个数字除以-我如何解决这个问题?

执行计算时,不必转换为双精度

使用BigDecimal的最大优点是,它允许处理任意大的数字,涉及数字“需要”的所有方面。含义:BigDecimal有多种计算方法,例如

换句话说:除非您100%确定来自该数据库的数字符合for Java双值,否则您可能只是“坚持”使用BigDecimal对象。任何可能使用原语double的计算也可以使用BigDecimal类提供的方法来完成


如果您的数字在double范围内(您的示例表明是这样),只需使用double.valueOf(String)将该字符串转换为double/double即可。那么你首先就不需要那个大的十进制“迂回”了

您对内部数字表示和用户显示有误解


要使用像您这样的大数字进行计算,
BigDecimal
class它是正确的选择。是的,您不能使用基本运算符(
+
/
-
..),必须使用
BigDecimal
类(
add()
subtract()
..)提供的方法。但反过来,当使用原始的
double
值进行计算时,由于固定的数字长度,尤其是在处理分数时,您会获得几乎无限的精度。为什么科学符号会困扰您?您可以在
double
BigDecimal
上直接执行算术。表示法只是一种打印的东西。将“带舍入模式的比例”设置为BigDecimal对象。@SangamBelose也许您可以解释为什么您认为舍入在这里很重要。@GhostCat我只想说,您也可以使用BigDecimal进行所有计算。我提到舍入模式是因为很多时候系统不需要太大的小数部分。@SangamBelose好吧,没有进一步的解释,这不是很清楚。我想我的第一个版本不是很好。我必须承认:我太懒了,没有先检查一下这个例子是否需要BigDecimal,或者是否可以像普通的double一样。你也有很好的,精确的答案。