Мне нужно сохранить точные значения, которые находятся в 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 для их хранения.
Итак, что нужно сделать, чтобы получить те же самые значения, которые мы переходим в Большие Десятичные числа?
Вы можете использовать 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
Используйте что-то вроде этого:
BigDecimal decimal = new BigDecimal(2.0, new MathContext(2, RoundingMode.UNNECESSARY));
1.1
является двойным Вместо этого пройдите"1.1"
. Что касается 2,5 против 2,50, то это те же самые значения.