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

时间:2017-07-10 12:04:21

标签: java double bigdecimal

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

2.0006362409E9

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

2000636240.900000095367431640625

当我尝试将BigDecimal.toPlainString()转换为double时,我会以科学记数法再次获取值。

我想把这个数字分开 - 我可以解决这个问题吗?

2 个答案:

答案 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值进行计算则由于固定的数字长度而具有固有的失败,特别是在处理分数时。