eCalculator v0.7.0

Features

    Using MikeMcl's decimal.js library:
  • https://github.com/MikeMcl/decimal.js

  • Basic Operations:
  • Input expression, press ENTER or click the C button.
  • Press ESC to clear the input text.
  • Press UP/DOWN to select history input.
  • Click the result number to put it to input text.

  • Numbers:
  • Decimal by default.
  • Prefix 0b for binary.
  • Prefix 0x for hex.
  • Underscore _ can be in a number ( exp. 10_000 ).

  • Strings:
  • Single/double quoted like 'abc' "str"
  • Use "\" to escape special characters, like
    \'	single quotation mark
    \"	double quotation mark
    \\	reverse solidus
    \/	solidus
    \n	newline
    \t	horizontal tab
    \u????	4 hex digits to represent a unicode char.
    \b	*backspace
    \f	*formfeed
    \r	*carriage return
    
    * Those characters are not displayed in the screen.
    
  • NOTE
    Actually it uses JSON's string format with additional "\'".
    You must follow its syntax or get an error.
    For more information you can visit http://json.org/
    

  • Currently supported operators
  • Basic:
    + : Plus (+)
    - : Minus (−)
    * : Times (×)
    / : Divide (÷)
    % : Module
    
  • Extanded:
    ** : Power
    // : Integer Divide
    */ : N-Power's Root: a */ b == a ** (1/b)
    
  • Bitwise (integers only):
    ~ : Bitwise NOT
    & : Bitwise AND
    | : Bitwise OR
    ^ : Bitwise XOR
    
  • Logical (true = 1, false = 0):
    ! : Logical NOT
    && : Logical  AND
    || : Logical  OR
    
  • Relational (true = 1, false = 0):
    == : Equal
    != : Not equal
    > : Greater than
    < : Less than
    >= : Greater than or Equal to
    <= : Less than or Equal to
    
  • Quest (lazy version):
    condition ? true value : false value
    for exp.
      1 >= 2 ? 10 : 20  =>  20
      1 ? 2 ? 3 : 4 : 5 ? 6 : 7  =  1 ? (2 ? 3 : 4) : (5 ? 6 : 7)
    
  • Operator Orders
  • Use ( and ) to promote orders.
    1	** */
    2	* / % //
    3	+ -
    4	~ & | ^
    5	! && ||
    6	== != > < >= <=
    7	? :
    
  • Variable, Constants and Functions
  • Assign Variable:
    =	a = ...
    a = b = 3	=>	a = (b = 3)
    a = 1 + (b = 2)	=> a = 3, b = 2
    [*] A variable could be assigned to a function.
    
  • Constants:
    E:	2.7182818...
    PI:	3.1415926...
    
  • Functions:
    abs:	absolute value
    ln:	log based on E
    lg lg10 log10:	log based on 10
    lg2 log2:	log based on 2
    log:	log(number, base)
    sin, cos, tan/tg, ctan/ctg:	Triangle functions
    ord/chr:	convert between char and code.
    signed/unsigned:	convert interger to signed/unsigned.
    
  • Infix/Postfix Notation
  • Infix (shortcut Ctrl+I):
    #{IN: 1+2}
    #{IN: 9*8-7/6}
    
  • Postfix (shortcut Ctrl+R):
    #{RPN: 1 2 +}
    #{RPN: 9 8 * 7 6 / -}
    
  • Mix up:
    #{RPN: 1 #{IN: 2+3} +}
    #{IN: 2+#{RPN: 9 8 * 7 6 / -}}
    
  • Postfix Notation Syntax
  • Operators:
    Unary:
    ~	#{RPN: 1 ~}
    !	#{RPN: 0 !}
    Not supported for conflict reason:
    	+	-
    ( Should use 0 and binary operators like #{RPN: 0 1 -} )
    
    Binary:
    All supported. e.g.
    #{IN: 6*7+8/(9-5)} equals to #{RPN: 6 7 * 8 9 5 - / +}
    
    Trinary:
    #{IN: a ? b : c} equals to #{RPN: a b c ?} . No colon(:)
    
  • Whitespaces and Commas
    Whitespaces are not necessary while no conflict. For ins.,
    #{RPN: 6 7 * 8 9 5 - / +} could be #{RPN:6 7*8 9 5-/+}
    
    Comma(,)s are ignored in RPN mode. So you can use them instead of whitespaces. For exp.,
    #{RPN:6 7*8 9 5-/+} could be #{RPN:6,7*,8,9 5,-,/,,+}
    
  • Function call:
    fn(args...) equals to (args... fn), but no comma(,)s joined into the arguments.
    
    e.g.
    #{IN: log(n, b) } equals to #{RPN: ( n b log ) }
    #{IN: ord(c)} equals to #{RPN: (c ord) }
    #{IN: log(8**4, 6-2)} equals to #{RPN:(8 4**,6 2-,log)}
    
https://github.com/eGust/calc.js

Author

eGust
egustc@gmail.com
http://egust.altervista.org/