/formula

Primary LanguageJavaScript

node run.js

2 + 2
{ type: '+',
  left: { type: 'number', value: '2', result: 2 },
  right: { type: 'number', value: '2', result: 2 },
  result: 4 }
RESULT
4


1 * 2 + 3 * 4 + 5 / 6.0
{ type: '+',
  left: 
   { type: '+',
     left: 
      { type: '*',
        left: { type: 'number', value: '1', result: 1 },
        right: { type: 'number', value: '2', result: 2 },
        result: 2 },
     right: 
      { type: '*',
        left: { type: 'number', value: '3', result: 3 },
        right: { type: 'number', value: '4', result: 4 },
        result: 12 },
     result: 14 },
  right: 
   { type: '/',
     left: { type: 'number', value: '5', result: 5 },
     right: { type: 'number', value: '6.0', result: 6 },
     result: 0.8333333333333334 },
  result: 14.833333333333334 }
RESULT
14.833333333333334


3 + 1/(7 + 1/(15 + 1/(1 + 1/(292 + 1/(1 + 1/(1 + 1/1))))))
{ type: '+',
  left: { type: 'number', value: '3', result: 3 },
  right: 
   { type: '/',
     left: { type: 'number', value: '1', result: 1 },
     right: 
      { type: '+',
        left: { type: 'number', value: '7', result: 7 },
        right: 
         { type: '/',
           left: { type: 'number', value: '1', result: 1 },
           right: 
            { type: '+',
              left: { type: 'number', value: '15', result: 15 },
              right: 
               { type: '/',
                 left: { type: 'number', value: '1', result: 1 },
                 right: 
                  { type: '+',
                    left: { type: 'number', value: '1', result: 1 },
                    right: 
                     { type: '/',
                       left: { type: 'number', value: '1', result: 1 },
                       right: 
                        { type: '+',
                          left: { type: 'number', value: '292', result: 292 },
                          right: 
                           { type: '/',
                             left: { type: 'number', value: '1', result: 1 },
                             right: 
                              { type: '+',
                                left: { type: 'number', value: '1', result: 1 },
                                right: 
                                 { type: '/',
                                   left: { type: 'number', value: '1', result: 1 },
                                   right: 
                                    { type: '+',
                                      left: { type: 'number', value: '1', result: 1 },
                                      right: 
                                       { type: '/',
                                         left: { type: 'number', value: '1', result: 1 },
                                         right: { type: 'number', value: '1', result: 1 },
                                         result: 1 },
                                      result: 2 },
                                   result: 0.5 },
                                result: 1.5 },
                             result: 0.6666666666666666 },
                          result: 292.6666666666667 },
                       result: 0.0034168564920273345 },
                    result: 1.0034168564920274 },
                 result: 0.9965947786606129 },
              result: 15.996594778660613 },
           result: 0.06251330447740013 },
        result: 7.0625133044774 },
     result: 0.14159265361893664 },
  result: 3.1415926536189365 }
RESULT
3.1415926536189365


1 / ((z + 1) * (z - 1))
{ type: '/',
  left: { type: 'number', value: '1', result: 1 },
  right: 
   { type: '*',
     left: 
      { type: '+',
        left: { type: 'name', id: 'z', result: 2 },
        right: { type: 'number', value: '1', result: 1 },
        result: 3 },
     right: 
      { type: '-',
        left: { type: 'name', id: 'z', result: 2 },
        right: { type: 'number', value: '1', result: 1 },
        result: 1 },
     result: 3 },
  result: 0.3333333333333333 }
RESULT
0.3333333333333333


sub('Gross Receipts')-sub('Payouts') 

{ type: '-',
  left: { type: 'category', id: 'sub(\'Gross Receipts\')', result: 500 },
  right: { type: 'category', id: 'sub(\'Payouts\')', result: 80 },
  result: 420 }
RESULT
420


sub('Net Sales')+sub('Sales Taxes')          +sub('Other Receipts')
{ type: '+',
  left: 
   { type: '+',
     left: { type: 'category', id: 'sub(\'Net Sales\')', result: 1000 },
     right: { type: 'category', id: 'sub(\'Sales Taxes\')', result: 100 },
     result: 1100 },
  right: { type: 'category', id: 'sub(\'Other Receipts\')', result: 90 },
  result: 1190 }
RESULT
1190


sub('Gross Sales')-sub('Voids')-sub('Discounts')
{ type: '-',
  left: 
   { type: '-',
     left: { type: 'category', id: 'sub(\'Gross Sales\')', result: 1000 },
     right: { type: 'category', id: 'sub(\'Voids\')', result: 10 },
     result: 990 },
  right: { type: 'category', id: 'sub(\'Discounts\')', result: 10 },
  result: 980 }
RESULT
980


sub('Deposits')
{ type: 'category', id: 'sub(\'Deposits\')', result: 100 }
RESULT
100


sub('Labor Summary').item('Labor Cost')   /  
  sub('Labor Summary').item('Labor Hours')
{ type: '/',
  left: 
   { type: 'item',
     id: 'sub(\'Labor Summary\').item(\'Labor Cost\')',
     result: 33 },
  right: 
   { type: 'item',
     id: 'sub(\'Labor Summary\').item(\'Labor Hours\')',
     result: 22 },
  result: 1.5 }
RESULT
1.5


sub('Labor Summary').item('Labor Cost')/sub('Net Sales')
{ type: '/',
  left: 
   { type: 'item',
     id: 'sub(\'Labor Summary\').item(\'Labor Cost\')',
     result: 33 },
  right: { type: 'category', id: 'sub(\'Net Sales\')', result: 1000 },
  result: 0.033 }
RESULT
0.033


(sub('Labor Summary').item('Labor Cost')/sub('Net Sales'))*8-2+15*(sub('Gross Receipts')-sub('Payouts')-8)
{ type: '+',
  left: 
   { type: '-',
     left: 
      { type: '*',
        left: 
         { type: '/',
           left: 
            { type: 'item',
              id: 'sub(\'Labor Summary\').item(\'Labor Cost\')',
              result: 33 },
           right: { type: 'category', id: 'sub(\'Net Sales\')', result: 1000 },
           result: 0.033 },
        right: { type: 'number', value: '8', result: 8 },
        result: 0.264 },
     right: { type: 'number', value: '2', result: 2 },
     result: -1.736 },
  right: 
   { type: '*',
     left: { type: 'number', value: '15', result: 15 },
     right: 
      { type: '-',
        left: 
         { type: '-',
           left: { type: 'category', id: 'sub(\'Gross Receipts\')', result: 500 },
           right: { type: 'category', id: 'sub(\'Payouts\')', result: 80 },
           result: 420 },
        right: { type: 'number', value: '8', result: 8 },
        result: 412 },
     result: 6180 },
  result: 6178.264 }
RESULT
6178.264