Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

iwill/ScriptCalculator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

220 Commits

Repository files navigation

ScriptCalculator

En | 中文

try it your self

calculation

  • basic: +, -, *, /, %, =, ( and )

  • variables: <previous>, $, $ln

  • optional spaces

  • comments

 2 + 4 // 2 + 4 == 6
 - 3 // 6 - 3 == 3 | prepend 6 - the result of the previous line
 // empty line
 * 4 // ERROR | the previous line is empty
0ドル / 2 // 6 / 2 == 3 | 0ドル is 6 - the result of the 0th line
 // empty line
10 % $ // 10 / 3 == 1 | $ is 3 - the previous result, not "the result of the previous line"
 $$ // == 3 | $$ is 3 - the 2nd-to-last result
  • percentage: % if it's NOT followed by number, variable, function or (
10% // 0.1 | percentage
10 % // 0.1 | percentage
10% + 1 // 0.1 + 1 == 1.1 | percentage
10% % 1 // 0.1 % 1 == 0.1 | percentage and remainder operation
10% - 7 // 0.1 - 7 == -6.9 | percentage
10 % (-7) // 10 % 7 == 3 | remainder operation
  • percentage conversion
0.1 %% // 10%
* 2 // 0.2
 %% // 20%
  • base/radix conversion
0b10 // 2
0o10 // 8
10 // 10
0x10 // 16
32 #2 // 0b100000
 #8 // 0o40
 #10 // 32
 #16 // 0x20
 #32 // 10
 #36 // W
 $ // 32
  • bitwise operations

!!!: JavaScript Uses 32 bits Bitwise Operands

1 << 0 #2 // 0b1
1 << 1 #2 // 0b10
1 << 2 #2 // 0b100
1 << 4 #2 // 0b10000
1 << 8 #2 // 0b100000000
1 << 16 #2 // 0b10000000000000000
1 << 32 #2 // 0b1 - JavaScript Uses 32 bits Bitwise Operands
  • builtin variables & functions
 E // 2.718281828459045
PI // 3.141592653589793
GR // 0.6180339887498949
MAX_SAFE_INTEGER // 9007199254740991
 == pow(2, 53) - 1 // true
MIN_SAFE_INTEGER // -9007199254740991
 == - (pow(2, 53) - 1) // true
min(max(1, 2), 3) // 2
 pow(2, 10) // 1024
 sqrt(1024) // 32
round(2000 / 3 * 100) / 100 // 666.67
round(2000 / 3, 2) // 666.67
_666: 2000 / 3 // 666.6666666666666
round(_666, 3) // 666.667
floor(_666, 2) // 666.66
 ceil(_666 / 2, 1) // 333.4
round(_666) // 667
round(_666, -1) // 670
round(_666, -2) // 700
1 // 1 | line number: 0
2 // 2 | line number: 1
3 // 3 | line number: 2
$sum(0, 2) = 6 \ // sum range: 0...2
&& $sum(-3, -1) = 6 \ // sum range: -3...-1
&& $sum(0) = 6 \ // sum range: 0...
&& $sum() = 6 \ // sum range: 0...
 // true
$avg(0, 2) // 2
$min(0, 2) // 1
$max(0, 2) // 3
  • defining variables & functions
 tax_rate: 0.45 // 0.45
 tax_qcd: 181920 // 181920
1000000 * tax_rate - tax_qcd // 268080
fun(ads, ads2usd, usd2rmb, rate, qcd): ads * ads2usd * usd2rmb * (1 - rate) + qcd
fun(10000, 45, 7, tax_rate, tax_qcd) // 1914420.0000000002
add({ a, b }): \
 a + b
add({ a: 1, b: 2 }) // 3
  • JavaScript blocks

vals[<result_index>], vars.<custom_var_name> and funcs.<custom_func_name> are available in JavaScript blocks

```
let s = "x";
return s.length;
``` // 1
lx: $ // 1
lx: \
```
let s = "x";
return s.length;
``` // 1
lx // 1
double(x): \
```js
return x * 2;
```
double(1) // 2
# Fibonacci
f: \
```js
// context for func 
let prev = 0; 
// func name for recursive invocation 
// instead of using `funcs._f` 
return function _f(n, reset) { 
 if (typeof n == "boolean") { 
 reset = n; 
 n = undefined; 
 } 
 if (reset) { 
 prev = 0; 
 } 
 if (n == undefined) { 
 n = prev; 
 prev = prev + 1; 
 } 
 if (n <= 0) return 0; 
 if (n <= 2) return 1; 
 return _f(n - 1) + _f(n - 2); 
} 
```
f() // 0
f() // 1
f() // 1
f() // 2
f() // 3
f() // 5
f(true) // 0
f() // 1
f() // 1
f() // 2
f() // 3
f() // 5

settings

  • decimal place count

  • decimal rounding method

  • reset settings

  • copy script + outputs + comments

other features

  • line number

  • sync scrolling

  • vertical ruler

  • change case:

    • control+u: uppercase
    • control+shift+u: lowercase
    • control+option+u: capitalize
  • format with shortcuts:

    • control+l: align script left, appending spaces to the right
      • +option: keep leading spaces
      • +shift: prepend spaces to the left
    • control+r: align script right, remove leading and trailing spaces
    • control+m: align script middle, align to trailing comments
    • control+[/]: indent left/right with 4 spaces
      • +option: keep leading spaces
    • control+/: prepend/remove trailing // comments
  • other shortcuts:

    • control+,: insert configurations with default values
    • control+shift+/: show help
  • serialize script to url hash and deserialize

  • share with short url

  • console log

all the tests

TODO

  • display error/warning count (at top) and info on the right

  • try it yourself in readme

BUG

  • page becomes unresponsive after type the semicolon like this
    • remember copying the url to backup if it happened
    • write break; first to workaround temporarily
```js
// the caret 👇🏿
for (let i = 0; i < 1;|) {
}
```
  • sometimes, result area does not scroll when insert newline

About

ScriptCalculator

Resources

License

Stars

Watchers

Forks

Languages

AltStyle によって変換されたページ (->オリジナル) /