2017-02-01 7 views
2

У меня есть коллекция, какОкругление до 2 знаков после запятой в MongoDB

Студент

{ 
    "first_name":"Harew", 
    "last_name":"Jackson", 
    "class":14, 
    "fee": [ 
     { "tuition":48500.2456, "transportation":500 } 
    ] 
} 

Мне нужно фильтровать студента в соответствии с fee = 4500.24 и он должен показать все студенты, имеющие плату 4500.24 игнорируя другие цифры после десятичной точки.

Я искал в MongoDB: How to get N decimals precision in a query точность-в-запросе, но решение при условии здесь не работает в моем сценарии, поскольку "$mod": [ "$amount.value", 0.01 ] не применяется для BigDecimal типа и в моей коллекции у меня есть тип платы как BigDecimal.

следующее решение, кажется, работает хорошо, но я не знаю, как реализовать это в Scala

+0

48500.2456 не равен 48500.24 и не должен использоваться в запросе. Однако для целей отчетности вы можете округлить его по вашему выбору. FYI 48500.2456 раундов до 48500.25 не 48500.24 – Saleem

ответ

1

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

Скала> Val S: BigDecimal = 10.232 s: BigDecimal = 10,232

Скала>s.setScale (2, BigDecimal.RoundingMode.HALF_UP) .toDouble res1: Двойной = 10.23 // ПЕРЕУСТРОЕННЫХ как двойной

Скале>s.setScale (2, BigDecimal.RoundingMode.HALF_UP) res2: scala.math.BigDecimal = 10.23 // Rouding Выкл

Итак, в scala вместо использования math.Round вы можете использовать setScale.

+0

Я уже пробовал это. Но это не сработало. Он округляет значение, но не соответствует значению в базе данных. Например, моя база данных имеет стоимость платы за обучение 48500.2456, но после этого я получаю 48500.24, но не соответствует данным базы данных –

+0

жаль, что я не получил вашу мысль, вы сказали, что вы конвертируете значение, поступающее из БД, то есть скажем, 48500.2456 до 48500.24 , но тогда вы сказали, что он не соответствует данным базы данных. Какие данные мы сейчас говорим. Вы преобразовываете данные из db, а также соответствующее значение в BigDecimals. –

+0

У меня есть 48500.2456 в базе данных, теперь я хочу, чтобы я соответствовал студенту, чья плата составляет 48500.24, запросив в scala –