도구
가이드

수식 계산기

생활

+ − × ÷ % ^ 와 괄호의 산술식을 안전하게 평가. eval 미사용, 코드 실행 없음.

100% 클라이언트 백엔드 없음
+ − * / % ^ 와 () 지원. Enter로 계산.
결과 —
이 페이지에서

이 계산기는 무엇인가요?#

텍스트로 입력한 수학 수식을 평가해서 숫자를 주는 단순한 산술 계산기입니다. (12 * 1.08) + 7 또는 2^10 % 256. 누를 함수 버튼이 없습니다. 전체 수식을 쓰고 키 하나를 누르면 됩니다.

중요한 부분은 어떻게 만들어졌는가입니다. 웹의 대부분 빠른 계산기는 문자열을 JavaScript의 eval()에 넘기는 속임수를 씁니다. 이것은 어떤 코드든 실행합니다. 장난감으로는 괜찮지만, 누군가 똑똑한 것을 붙여넣는 순간 보기 흉해집니다. 이것은 그렇지 않습니다. 숫자, 괄호, 연산자 + - * / % ^만 받아들이는 손으로 쓴 재귀 하강 파서를 실행합니다. 그 문법 바깥의 것은 즉시 거부됩니다. 그래서 진짜로 코드를 실행할 수 없는 계산기이며, 그것이 바로 붙여넣기에 안전한 이유입니다.

사용 방법#

  1. 입력 상자에 수식을 입력하세요. 공백은 무시되므로 1+2와 1 + 2는 같습니다.
  2. 연산자: 사칙연산은 + - * /, 나머지(모듈로)는 %, 거듭제곱은 ^. 괄호 ( )가 그룹을 묶습니다. 단항 마이너스도 작동해서 -5 + 3은 -2입니다.
  3. 소수와 과학적 표기법도 괜찮습니다. 0.5, 1e3(1000), 2.5e-2.
  4. 계산을 클릭하거나(또는 Enter). 결과 줄에 숫자가 표시되거나, 문제를 지적하는 인라인 메시지가 표시됩니다. 0으로 나누기, 예상치 못한 문자, 괄호가 짝이 맞지 않습니다 등. 그래서 무엇이 잘못됐는지 추측하는 대신 수식을 고칠 수 있습니다.
  5. 이진 부동소수점 먼지는 자동으로 닦여서, 0.1 + 0.2는 0.30000000000000004가 아니라 0.3으로 표시됩니다.

주요 특징#

  • eval 없음, new Function 없음, 식별자 없음. 숫자와 일곱 개의 연산자 문자만 받아들입니다. 완전히 한정된 문법이지 임의 코드 실행이 아닙니다.
  • 올바른 연산자 우선순위(PEMDAS). 괄호, 그 다음 ^, 그 다음 * / %, 그 다음 + -.
  • 우결합형 거듭제곱. 2^3^2는 수학자가 쓰는 방식으로 평가됩니다(실제 예시 참조).
  • 과학적 표기법(6.022e23)과 나머지(17 % 5)로 실제 백지 계산 가능.
  • 친절하고 구체적인 오류, 조용한 NaN 대신 실패(0으로 나누기, 잘린 수식, 잘못된 숫자)를 이름 짓고 해당 위치를 알려줍니다.

실제 예시#

각각 다른 동작을 보여주는 세 수식입니다. 한 번에 하나씩 붙여넣으세요.

연산자 우선순위와 그룹화.

(1 + 2) * 3 ^ 2

결과: 27. 괄호가 먼저 1 + 2 = 3을 강제합니다. 그 다음 3 ^ 2가 곱셈 전에 평가됩니다(^가 *보다 단단히 결합), 9를 주며, 마지막으로 3 * 9 = 27. 괄호가 없었다면 1 + 2 * 3 ^ 2는 1 + 18 = 19입니다.

우결합형 거듭제곱.

2 ^ 3 ^ 2

결과: 64가 아니라 512. 거듭제곱은 오른쪽으로 결합하므로 이것은 2 ^ (3 ^ 2) = 2 ^ 9 = 512입니다. 진짜로 (2 ^ 3) ^ 2 = 64를 원했다면 괄호를 쓰세요.

이진 먼지 제거.

0.1 + 0.2

결과: 0.3. 날것의 이진 부동소수점 합은 0.30000000000000004이지만, 포매터가 사람이 기대하는 방식으로 읽히도록 적절한 유효 숫자로 반올림합니다.

FAQ#

왜 sin, log, sqrt, pi를 쓸 수 없나요?#

그것들이 식별자이고, 식별자는 의도적으로 문법에 없기 때문입니다. 모든 이름은 예상치 못한 문자로 거부됩니다. 그것이 계산기가 결코 코드를 실행하지 않게 하는 선입니다. sqrt(16)이 필요하면 16 ^ 0.5로 다시 쓰세요. log와 sin에는 공학 계산기를 사용하세요.

2^3^2는 512인가요, 64인가요?#

512. ^ 연산자는 우결합형이며, 수학과 대부분 프로그래밍 언어의 거듭제곱 연산자에서 쓰는 관행과 일치합니다. 2^3^2는 2^(3^2)로 파싱됩니다. 64를 얻으려면 (2^3)^2로 쓰세요.

% 연산자는 여기서 무엇을 하나요?#

“퍼센트”가 아니라 모듈로, 즉 정수 나눗셈 후의 나머지입니다. 17 % 5는 2인데, 17을 5로 나누면 나머지가 2이기 때문입니다. “이 숫자가 짝수인가?”(n % 2), 값을 범위로 감싸기, 또는 시계 산수에 편리합니다. * 및 /와 같은 우선순위를 가집니다.

제 수식은 서버로 전송되나요?#

아니요. 파싱과 평가는 손으로 쓴 파서로 전적으로 브라우저에서 일어납니다. 백엔드가 없고, 입력은 페이지를 떠나지 않습니다.