计算器
四则运算、括号、百分号与开方,键盘可直接输入,带历史记录;百分号按计算器惯例解释。
按「=」或回车求值。% 在加减号后按「左侧值的百分之几」算。
历史记录(点一条可填回算式)
还没有计算记录。
本工具在你的浏览器内运行,输入的内容与文件不会上传到任何服务器。
常见问题
- 百分号是怎么算的?为什么和某些计算器不一样?
- 本工具按实体计算器的通用惯例:加减号后面的百分数表示「左侧那个数的百分之几」,乘除号后面的百分数表示「除以 100」。举个形状相同的例子:`100+10%` 得的是 110(10 是 100 的 10%),而 `100×10%` 得的是 10(先把 10% 折成 0.1 再乘)。这个区别来自计算器的历史习惯,不是数学定义的唯一答案;如果按纯数学理解,% 只是一个「除以 100」的后缀,那 `100+10%` 会得 100.1。两种口径都有人用,所以本页明确写下采用的是哪一种。
- 为什么要自己写解析器,直接用 JavaScript 求值不行吗?
- 因为那意味着把用户输入交给运行时的代码求值(`new Function` / `eval`)。即使前面加了字符白名单,它也仍然是一次「把数据当代码执行」的操作 —— 这类写法在审计里是明确的红点,且容易受页面安全策略影响。本工具用词法分析 + 递归下降解析,表达式全程只被当作数据。附带的好处是能给出更准的报错:括号少了一个、某个运算符前面缺数字,都能指出来,而不是笼统地说一句「出错」。
- 为什么 0.1+0.2 显示的是 0.3,而不是一长串 0.30000000000000004?
- 因为二进制浮点本身就表示不了精确的 0.1 与 0.2,直接打印会带出一串浮点噪声。本工具会把结果归一到 12 位有效数字再显示 —— 12 位远超出日常计算需要的精度,同时足以消掉这类噪声。需要留意的是:如果计算涉及金额,最好把单位放大成「分」再算,或者接受显示值只是近似(财务场景请以专门的会计工具为准)。