Строка в значение BigDecimal - PullRequest
       6

Строка в значение BigDecimal

0 голосов
/ 04 октября 2018

Может ли кто-нибудь помочь мне получить точное значение 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.Я прочитал эту строку из БД и установил ее в классе компонента, где поле amt имеет тип string, используя значение «2.7955814565E10».Когда я пытаюсь преобразовать это в BigDecimal, я получаю 27955814565 вместо 27955814565.0.

Может кто-нибудь сказать мне, в чем проблема, потому что для остальных всех полей логика для преобразования строкового значения в BigDecimal работает нормально иЯ хочу точное значение, как в БД?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

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

BTW Если ваш ввод

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

, вывод

27955814565.000
0 голосов
/ 04 октября 2018

Как вы уже знаете, ваша строка находится в научной нотации. Чтобы перевести эти значения в исходный 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

Вы также можете использовать метод Format для BigDecimal для достижения своей цели.

DecimalFormat decimalFormat = new DecimalFormat ("0.0000000000");

...