Как хранить цены в Mongodb - PullRequest
       1

Как хранить цены в Mongodb

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

У меня есть цена в формате String, цена может содержать как десятичное, так и целое число. как

String price ="100.00";
String price ="100";
String price ="100.123";

Я хочу сохранить это в mongodb, как число (100) или просто 100.23 (не строка). Как справиться с этим в Java, так как парсеры отличаются для Integer и другого формата.

Ответы [ 2 ]

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

Я думаю, вы можете попробовать перейти на BigDecimal.

Вы можете прочитать здесь: Java лучший тип для удержания цены

Собственные типы Java с плавающей точкой (float и double) страдают от тех же проблем точности, что и другие языки программирования. Я думаю, что вы можете сделать BigDecimal из String, long и double. Но, как я уже сказал, вы не должны идти вдвойне. Пожалуйста, вы можете найти способ сохранения без потери точности внутри Mongodb, а затем напрямую преобразовать его в BigDecimal. Если вы не можете легко преобразовать обратно в BigDecimal, пожалуйста, используйте String для хранения внутри Mongodb и после этого создайте BigDecimal из этой String.

Здесь я нашел один пост и одну статью об этом: Spring Data MongoDB Поддержка BigDecimal https://www.moschetti.org/rants/mongomoney.html

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

Вы можете сохранить тип Double BSON для хранения значения цены. Если значение цены равно 100, его можно сохранить как 100.00.

Эквивалентный тип Java - java.lang.Double.

Отображение типа данных BSON в Java

Целочисленное значение может быть преобразовано в double в Java. Пример кода: -

new Double(100);
int i = 100;
new Double(i);
Integer i1 = 100;
new Double(i1);
double d1 = (double) i;

С версии 3.4 доступен новый Десятичный128 тип данных BSON .

Java API может принимать значение BigDecimal или long для создания объекта Decimal128. Пожалуйста, обратитесь к документации API выше.

Обратитесь к этому блогу , чтобы понять, зачем нужен Decimal128?

Проблемы арифметической точности с плавающей запятой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...