Печать значений, как это используется BigDecimal в Java

1

Мне нужно сохранить точные значения, которые находятся в csv в базе данных. Столбцы имеют денежные значения. Поэтому использование BigDecimal для хранения денежных ценностей.

Рассмотрим следующий пример с различными случаями:

Дело 1:

BigDecimal d=new BigDecimal(1);
System.out.println(d);

Я получаю "1" как результат, как ожидалось.

Случай 2:

Но когда я добавляю к нему десятичный знак, я получаю разные результаты.

BigDecimal d=new BigDecimal(1.1);           
System.out.println(d); 

Я получаю "1.100000000000000088817841970012523233890533447265625" в качестве вывода для вышеуказанного кода.

Случай 3:

BigDecimal d=new BigDecimal(2.50);
System.out.println(d); 

Я получаю "2.5" в качестве вывода для вышеуказанного кода. В этом случае он обнуляет нуль.

Моему клиенту требуется то же самое значение, которое передается для хранения в базе данных. Поскольку значения связаны с деньгами, я не могу использовать String для их хранения.

Итак, что нужно сделать, чтобы получить те же самые значения, которые мы переходим в Большие Десятичные числа?

  • 3
    Если вам нужны точные значения, не используйте double. 1.1 является двойным Вместо этого пройдите "1.1" . Что касается 2,5 против 2,50, то это те же самые значения.
  • 0
    @JBNizet Добавьте предложение о том, почему 1.1 является двойным (и добавьте в него арифметику с плавающей запятой), и вы получите ответ
Теги:
database
csv
bigdecimal

2 ответа

4
Лучший ответ

Вы можете использовать constructor с параметром String.

BigDecimal d=new BigDecimal("1");
System.out.println(d.toString());//Will print 1



BigDecimal d=new BigDecimal("1.1");           
System.out.println(d.toString()); //Will print 1.1


BigDecimal d=new BigDecimal("2.50");
System.out.println(d.toString()); //Will print 2.50
  • 1
    Это правильный путь +1
0

Используйте что-то вроде этого:

BigDecimal decimal = new BigDecimal(2.0, new MathContext(2, RoundingMode.UNNECESSARY));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню