sql >> Databáze >  >> NoSQL >> MongoDB

Zaokrouhlování na 2 desetinná místa pomocí agregačního rámce MongoDB

Neexistuje žádný $round ale můžete to udělat v agregačním rámci – když to uděláte v určitém pořadí, obvykle se vyhnete problémům s přesností v pohyblivé řádové čárce.

> db.a.save({x:1.23456789})
> db.a.save({x:9.87654321})
> db.a.aggregate([{$project:{ _id:0, 
         y:{$divide:[
              {$subtract:[
                      {$multiply:['$x',100]},
                      {$mod:[{$multiply:['$x',100]}, 1]}
              ]},
              100]}
}}])
{ "y" : 1.23 }
{ "y" : 9.87 }

Vzhledem k existujícímu potrubí v problému nahraďte:

{$multiply:[{$divide: ['$ActSls', '$PlnSls']},100]}

s

{$divide:[
     {$subtract:[ 
          {$multiply:[
             {$divide: ['$ActSls','$PlnSls']},
             10000
          ]}, 
          {$mod:[
             {$multiply:[{$divide: ['$ActSls','$PlnSls']}, 10000 ]},
             1]}
          ]}, 
     100
]}

S vašimi ukázkovými datovými body je výsledek:

{ "ActSls" : 31, "PlnSls" : 51, "ActToPln" : 60.78 }
{ "ActSls" : 41, "PlnSls" : 51, "ActToPln" : 80.39 }
{ "ActSls" : 72, "PlnSls" : 102, "ActToPln" : 70.58 }


  1. Serializujte jednu třídu dvěma různými způsoby s Jacksonem

  2. Průnik dvou nebo více seřazených množin

  3. Proč Redis SortedSet používá Přeskočit seznam místo Balanced Tree?

  4. Problém malých souborů