当我这样做时,我从我的数据库中获取以下值
resultSet.getdouble()
2.0006362409E9
我想对这个号码进行算术运算。
我尝试使用BigDecimal.toPlainString()
获取实际值,然后我得到以下值
2000636240.900000095367431640625
当我尝试将BigDecimal.toPlainString()转换为double时,我会以科学记数法再次获取值。
我想把这个数字分开 - 我可以解决这个问题吗?
答案 0 :(得分:4)
您无需转换为 double 即可执行计算。
使用BigDecimal的关键在于它允许处理关于数字"需要"的所有方面的任意大数字。含义:BigDecimal有各种计算方法,例如divide()。
换句话说:除非你100%确定来自该数据库的数字符合range的Java双值 - 你可能只是"坚持"使用BigDecimal对象。原始双精度可能的任何计算也可以使用BigDecimal类提供的方法完成。
如果您的数字在 double 范围内(您的示例表明如此) - 只需使用Double.valueOf(String)将该字符串转换为Double / double。那么你不需要BigDecimal"绕道而行#34;首先!
答案 1 :(得分:4)
您对内部号码表示和用户显示存在误解。
要像你的BigDecimal
类一样使用大数字进行计算,这是正确的选择。是的,您不能使用原始运算符(+
/ -
...)并且必须使用BigDecimal
类提供的方法(add()
,subtract()
...)。但是作为回报,你可以获得几乎无限的准确度,而使用原始double
值进行计算则由于固定的数字长度而具有固有的失败,特别是在处理分数时。