字符串到BigDecimal值

时间:2018-10-04 06:50:58

标签: java bigdecimal

有人可以帮助我获得BigDecimal的确切值吗?

我的代码如下,

import java.math.BigDecimal;
public class HelloWorld{

     public static void main(String []args){
         String x="2.7955814565E10";
         BigDecimal y=new BigDecimal(x);
         System.out.println(y.toPlainString());
     }
}

我在数据库中的实际值为 27955814565.0 ,即String。我从DB读取了此字符串,并将其设置在amt字段具有类型字符串的bean类中,使用值“ 2.7955814565E10”。当我尝试将其转换为BigDecimal时,我得到的是27955814565而不是27955814565.0。

有人可以告诉我这是什么问题,因为对于其余所有字段而言,用于将字符串值转换为BigDecimal的逻辑工作正常,并且我想要与DB中一样的确切值吗?

2 个答案:

答案 0 :(得分:3)

在这种情况下,BigDecimal不会推断出多余的数字。

如果输入为

String x = "2.79558145650E10"; // note the extra 0

您将获得预期的结果。您还可以根据需要添加数字。

String x = "2.7955814565E10";
BigDecimal y = new BigDecimal(x);
if (y.scale() < 1)
    y = y.setScale(1);
System.out.println(y.toPlainString());

打印

27955814565.0

顺便说一句,如果您输入的是

String x = "2.7955814565000E10"; // note the extra 000

输出为

27955814565.000

答案 1 :(得分:1)

您已经知道,您的字符串采用科学计数法, 要将这些值转换为原始的BigDecimal或Decimal,我们需要一种正确的方法。

public class Test {
public static void main(String[] args) {
    double firstNumber = 12345678;
    double secondNumber = 0.000012345678;
    String firstNumberAsString = String.format ("%.0f", firstNumber);
    String secondNumberAsString = String.format("%.12f",secondNumber);
    System.out.println(firstNumberAsString);
    System.out.println(secondNumberAsString);
}

}

输出将是:

12345678

0.000012345678

您也可以在BigDecimal上使用Format方法来实现您的目标。

DecimalFormat decimalFormat =新的DecimalFormat(“ 0.0000000000”);