4 个版本 (2 个重大变更)
| 0.4.0 | 2022年8月7日 |
|---|---|
| 0.3.0 | 2021年2月24日 |
| 0.2.1 | 2021年2月12日 |
| 0.1.0 |
|
| 0.0.2 |
|
#270 in 数学
每月32次下载
44KB
983 行
calc
另一个 CLI 计算器。受优秀项目 https://github.com/alfredxing/calc 启发。
安装
在有 Rust 工具链的情况下
cargo install --force calc
或者,您也可以下载最新 发布版 的预编译可执行文件。
使用方法
表达式模式
$ calc "1/(2+(3*(4-5)))"
-1
$ calc "round(12345 / 543)"
23
当存在非标志参数时,calc 将其解释为表达式并立即计算。
Shell 模式
$ calc
[0]: 1 + 1
2
[1]: 3*(5/(3-4))
-15
[2]: 3*pi**2
29.608813203268074
[3]: @+1
30.608813203268074
[4]: @@@*2
-30
[5]: ln(-1)
NaN
在没有非标志参数的情况下,calc 启动一个简单的 shell,仅计算每行输入。
参考
数据类型
calc 的每次调用都将所有参数解释为单个数据类型。默认情况下,f64,但可以通过命令行标志选择其他数据类型
f64(默认值):有符号 64 位浮点运算u64:无符号 64 位整数运算i64:有符号 64 位整数运算
请注意,选择的数据类型将限制可用的运算符、函数和常量。例如,三角运算在整数上不可用,而位移运算在浮点上不可用。
数字输入格式
数字可以在任何位置包含 _ 字符。这些符号被忽略;它们仅用于用户便利性和可读性。
calc 可以处理多种数字基的输入。
-
未注解的数字假定为十进制。例如:
123.45。注意:这是非整数数字的唯一合法格式。
-
带有前缀
0b的数字是以二进制表示的。例如:0b0110_1010。 -
带有前缀
0o的数字是以八进制表示的。例如:0o755。注意:数字前的单个
0本身不是八进制前缀。例如:0755等于0d755。 -
带有前缀
0d的数字是以十进制表示的。例如:1234_5678。 -
带有前缀
0x的数字是以十六进制表示的。例如:0xdead_beef。
可以混合不同基数的输入。
数字输出格式
可以通过在表达式中添加一个 : 符号后跟一个格式指定符来指定表达式的输出格式。
格式指定符可以是 num-runtime-fmt crate 识别的任何内容。
$ calc -u "0o644 | 0o111 :#o"
0o755
$ calc -u '0o755 & !0o111 :04o'
0644
[0]: 0xab :b 4
1010 1011
[1]: @[0] >>> 4 :x_4
b000_0000_0000_000a
[2]: @ & 0xF :4b
1010
$ calc pi / 3 :v#04.4
0d01.0471
运算顺序
以下运算顺序用于解析表达式
- 括号 (
(...)) - 一元前缀运算符 (
-!) - 移位和指数运算 (
<<>><<<>>>**) - 位运算 (
&|^) - 乘法和除法 (
*///%) - 加法和减法 (
+-)
具有相同优先级的运算从左到右解析。
一元前缀运算符
-:取反!:按位非
中缀运算符
+:加法-:减法*:乘法/:除法//:截断除法:除法并截断所有小数点后的数据。**:指数运算%:算术余数<<:左移>>:右移<<<:循环左移(旋转左移)>>>:循环右移(旋转右移)&:按位与|:按位或^:按位异或
函数
abs:绝对值ceil:大于或等于输入的最小整数floor:小于或等于输入的最大整数round:最接近输入的整数;对于中间值,远离0.0sin:正弦cos:余弦tan:正切sinh:双曲正弦cosh:双曲余弦tanh:双曲正切asin:反正弦acos:反余弦atan:反正切asinh:反双曲正弦acosh:反双曲余弦atanh:反双曲正切rad:将度数转换为弧度dec:将弧度转换为度数sqrt:平方根cbrt:立方根log:以10为底的对数lg:以2为底的对数ln:自然对数(底为e)exp:e的x次方
三角函数以弧度为单位进行运算。
常数
e:欧拉数pi:阿基米德常数π:阿基米德常数
历史
在shell模式下,calc 会将所有表达式的结果保存在内存中,直到退出。
伪变量 @ 总是指向前一个表达式的结果。伪变量 @@ 总是指向前一个表达式的结果。可以使用任意数量的 @ 符号进行链式引用。
直接链式引用 @ 符号可能会变得繁琐。语法 @{N},其中 N 是一个整数,指向前一个的第N个结果。 @{1} 总是指向前一个表达式的结果;它与 @ 等价。 @{3} 指的是三个表达式前的结果;它与 @@@ 等价。
伪变量 @[0] 总是指当前shell会话中的第一个表达式的结果。同样,@[1] 指的是第二个,依此类推。shell界面指示当前表达式。
警告
不支持隐式乘法
不支持隐式乘法。请使用乘法运算符,如 *。
浮点数错误
浮点数运算可能会累积损失,而 calc 没有特别努力来防止这类错误。例如
$ calc 'sin(rad(45)) - (sqrt(2) / 2)'
-0.00000000000000011102230246251565
结构体
此crate包含库代码和CLI代码。CLI代码全部被功能cli所限制;cli功能默认包含。这意味着CLI默认会构建。然而,您可以在Cargo.toml中包含,这样就可以使用此crate作为库而不构建任何CLI代码。
[dependencies]
calc = { version = "*", default-features = false }
依赖项
~3–15MB
~185K SLoC