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