Mac 平台下的计算器有许多种,但无论是 Mac 自带计算器抑或是以自定义出名的 PCalc 都保持了传统的数字和运算符号按键。

不过,我们与电脑的交互几乎都是由鼠标(触控板)键盘来完成的,因此在一定程度上展示按键的意义不大,而 numi 就是这样一款产品 —— 界面上直接就是输入,将所有按键去除,只保留一个简约的输入文字的界面。它不限制你的输入内容、可以设置快捷键快速呼出、可以设置浮动于所有窗口之上,你甚至可以将之当作一款速记应用使用。


Numi 去除了传统按键就是将自由交还给了用户 —— 你可以记任何你想记的东西,而如果涉及到计算 numi 会自动在右侧给你计算结果。并且,numi 本身也支持单位的转换和时间的计算,你也可以利用它来获取实时汇率并做货币转换,或是,你也可以利用 JS 来实现任何你自己需要的「计算」。

功能

Numi 所有的功能使用方法都可以在 官方文档 中找到,大体而言,numi 分为了计算和转换两大类功能,在此基础上支持 π、e 两个常量和自定义的变量用于辅助计算。

基本「语法」

想要在 numi 中进行计算直接输入算式即可,一行一个算式,前后可以加一些辅助性的说明文字,numi 会智能的将之忽略而计算你所输入的算式的结果。

以 # 开头的行为标题,在一行中你可以用「文字 + 半角分号」的格式分隔你的描述性标签和后面的算式,标题和标签都会以橙色高亮显示。

在行内用引号包裹的部分和一行中 // 以后的部分为注释,以灰色表示,注释部分即使有算式也不会被计算。

普通计算功能 —— 基础计算、科学计算、位运算算

Numi 支持一般计算器的计算功能,包括基础计算、科学计算和位计算。

Numi 支持的运算数字上届高于 1E127,甚至远大于了所谓的天文数字,足以满足日常的一切计算。

对于基本计算功能而言,numi 可以支持我们生活中常用的加减乘除和嵌套括号,也支持用 ^ 代表的幂指、以 mod 代表的取余。而位运算则是与 &、或 |、异或 xor 、左移 <<、右移 >>,对于与计算机经常打交道的人士非常友好。

Numi 也实现了科学计算器的功能,它以函数的形式实现,函数采用 函数名 函数参数 (要计算的内容) 这一格式,函数参数是只有部分函数需要的,例如计算对数是 log 底数 (真数) ,而计算常对数函数则可以直接使用 ln (真数)。Numi 所支持的函数可以参考 文档 ,其支持我们常见的所有数学运算,并且命名也和我们数学中常用的名字一样,几乎没有记忆负担。

百分比计算

Numi 支持着极为强大的百分比计算,包括「一个数加减百分之多少是多少」和「一个数是另一个数的百分之几」。

Numi 的百分比计算语法和英文口语中的基本一致,不过对于一般生活中不是用英语交流的我们中国人来说可能就不是那么友好了。

数值单位

英文母语人士常用的千 thousand、兆(百万)million 是可以直接用 k 和 M 代替的,注意这里有一个大小写的坑,因为 K 被 Numi 用作了热力学温度开尔文的单位而 m 是日期计算中月的单位,因此必须使用 k 和 M。当然,对于日常用万、亿这些表述的我们中国人,这个功能也就不是那么常用了。

单位转换

Numi 的单位转换语法是 [数值][单位A] in [单位B] ,用此即可得出一定数值的单位 A 转换为单位 B 后为多少,这也是一个英文中的常用表达,幸好这个的记忆负担不大。

Numi 支持生活中常用的单位,包括 温度长度面积体积重量角度 和 货币,也支持计算机领域的数据CSS

一般情况下表示一个单位可以任选使用英文全称、英文简称和一些替代性符号(如表示角度的 °),不过具体还是建议使用前先点击前面的链接浏览一下相关的官方文档。

日期和时间

Numi 虽然支持日期和时间的计算,但使用起来却没有什么实际意义。

可以看到,numi 的日期计算并非是依据日历计算而只是依据简单的 1 年 = 365 天、1 月 = 30 天这样的简单换算比例进行,并且因为 表示中国时区的 CST 这一概念具有歧义 因此 numi 也无法直接进行和北京时间有关的时间计算,同时我们经常用到的计算两个日期间相差多少天或是两个时间点相差多少秒也是不支持的。

不过这个到也不是不能解决,numi 支持使用 JS 扩展,而 JS 对日期时间的处理则很强大,因此如果你需要使用某一特定功能是可以利用扩展来进行封装实现的。

常量与变量

Numi 支持自然常数 e 和圆周常数 π 两个常量,可以直接使用 e/Epi 来代表它们。
Numi 也内置了一个 prev 变量代表着上一行(不是上一个算式,如果上一行没有计算结果则 prev 为空)的运算结果,同时你也可以定义自己需要的变量以供使用,使用 变量名=变量值 的格式定义即可。

进阶

虽然对于一个计算器而言,上面的功能已经足够强大,但是,其实还是有一款产品是可以和它竞争的 —— 那就是 Soulver。不过,numi 拥有者两个「杀手锏功能」—— 自定义扩展和 Alfred 协同。自定义扩展使它几乎「全能」,可以让你安装自己的需求来为它增加功能,Alfred 协同使得它可以被极快速的唤起,且「用完即走」。

Alfred 协同

如果你拥有 Alfred 且已经购买了 Power Pack,则你可以通过安装 Numi workflow 来实现快速调用。

快捷键唤醒 Alfred —— 输入 n、空格和你要计算的算式 —— 得出结果 —— 随手关闭继续你当前的工作

Numi 的 Alfred 协同功能可以让你在平常感受不到它存在的同时享受到它强大的功能。

自定义扩展

Numi 还有一个强大但却专业的功能 —— 扩展。细看我上面的分析,numi 有很多地方都是「美国人优先」或「英文优先」的,因此我们用着它所谓的「自然语言识别」功能却十分别扭,它在中国实在有一些「水土不服」。

幸好,numi 支持利用 JS 来扩展它的功能,包括自定义全局变量、计量单位、计算函数。JS 语言十分简单,即使你完全不会也可以通过阅读 MDN 快速学会 —— 当然,你只需要懂得一些表层语法和基本功能,而不需要真的系统学习,需要什么再去查文档就好了。

如果你想自定义一个扩展,那么可以打开插件文件夹,将默认的 Default.js 拷贝一份命名为 sample.js,打开查看。这里提醒一下,学习时采用了复制新建扩展而不是直接在官方例子上修改是一个好习惯,这可以防止你改错了却找不到原始文件的尴尬情形。

b
b

官方给的插件示例有三大板块,分别说明了如何自定义全局变量、计量单位、计算函数。我对它的代码做了一些注释补充,阅读后可以很容易理解 numi 扩展系统的工作方式并编写出自己的插件。

// Examples

// 定义全局变量:myvar=5美元,anothervar=333
numi.setVariable("myvar", { "double": 5, "unitId" : "USD" });
numi.setVariable("anothervar", 333);

// 定义新计量单位, 1 horse = 2.4 meters
numi.addUnit({
   "id": "horse",
   "format" : "hrs", // 新单位名称
   "phrases": "horse, horses, hrs", // 可用什么来表示新定义的单位(可以理解为别名)
   "ratio" : 2.4, 
   "baseUnitId": "m", // 与上一行一起表示 1hrs=2.4m
});

// 自定义函数 zum ,计算传入的两个值只和,使用方式类似于 zum(2;3)
numi.addFunction({ "id": "zum", "phrases": "zum" }, function(values) {
    // "phrases": "zum" 表示函数名称
    // values 代表传入的值,values[i].double 代表传入的第 i 个值是什么
    return { "double": values[0].double + values[1].double };
});

将上述代码拷贝覆盖掉 sample.js 原有内容,保存,打开 numi,即可看到扩展的效果。

结束语

官方给 numi 的定义是「Beautiful calculator app for Mac」,就目前而言,numi 确实足够漂亮,并且,它现在也在越来越强大,你也可以自定义它来让它更适合你自己。简洁易用、强大而不失美观,numi 是一款值得一用的工具。

Numi 是一款少部分功能收费的软件,目前正在以 $19.99 的价格预售并暂时可免费使用,同时它也已加入 Setapp 全家桶。


2
0