命令行表达式求解器?


8

我正在寻找兼容Linux的基于TTY的计算器。例如:

user@host:~$ calculate
> 2
2
user@host:~$ calculate
> 8*6-4
44
user@host:~$ calculate
> 8*(6-4)
16

是否有这样的东西支持基本操作,某些内置功能(如atan())以及可能通过脚本编写的自定义功能?

Answers:


7

公元前和直流

bcdc是2个计算器是需要从终端接入时,我会经常使用。

例子

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

然后,您可以输入问题:

2
2
5+5
10

完成后,您可以使用Ctrl+ 退出C

试驾

这些计算器功能丰富。

缩放

scale=5
193 * 1/3
64.33333

方程式

principal=100
ir = 0.05
years = 5
futurevalue = principal * (1 + ir)^years

futurevalue
127.62800

你的例子

8*6-4
44

8*(6-4)
16

计算

如果您想要更多的互动性,可以使用calc

$ calc
C-style arbitrary precision calculator (version 2.12.4.4)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; 10+10
20
; 8*6-4
    44
; 8*(6-4)
    16
; 

您可以使用向上/向下箭头浏览过去的命令,并且还具有交互式帮助。

; help

给你这个:

For more information while running calc, type  help  followed by one of the
following topics:

    topic               description
    -----               -----------
    intro               introduction to calc
    overview            overview of calc
    help                this file

    assoc               using associations
    builtin             builtin functions
    command             top level commands
    config              configuration parameters
    custom              information about the custom builtin interface
    define              how to define functions
    environment         how environment variables effect calc
    errorcodes          calc generated error codes
    expression          expression sequences
    file                using files
    history             command history
    interrupt           how interrupts are handled
    list                using lists
    mat                 using matrices
    ...

参考文献


由于这不是Ubuntu特有的问题,也许链接到calc上游而不是Ubuntu软件包?
mattdm

@mattdm-感谢添加该链接,我只是简单地将另一个链接b / c留在了calc的手册页上,而不必是ubuntu软件包。
slm

6

您的问题有很多答案...

您可以在Shell中执行的简单操作。

$ echo $((8*(6-4)))
16

作为专用程序bc

$ echo "8*(6-4)" | bc
16

通过脚本自定义功能?好吧,shell脚本和bc都在某种程度上拥有它们。取决于您要走多远。

为什么不使用Python?很容易学习。

$ python
>>> from math import atan
>>> 8*(6-4)+atan(0)
16.0

我最近实际上一直在使用Python,但这就是我想要其他东西的原因。必须为每个函数导入一些东西会很烦人。我希望更多的东西可以独立使用,例如Speedcrunch(i.imgur.com/Cn6GejG.png),但是显然可以使用命令行。
卢卡斯·菲利普斯

1
您可以通过定义PYTHONSTARTUP环境变量并在该变量指向的文件中预导入内容来解决导入问题。
mkc



2

千里马CAS

   L(t):= exp(%i * t * 2 *%pi); / *单位圆的参数设置成角度* /
   plot2d(
   [atan2(imagpart(L(x)),realpart(L(x)))),
   [x,0,1],
   [y,-2 *%pi,2 *%pi],
   [plot_format,gnuplot],
   [gnuplot_term,“ png”],
   [gnuplot_out_file,“ atan2.png”],
   [传说,“ atan2”],
   [xlabel,“弧度角”], 
   [ylabel,“弧度角”],
   [gnuplot_preamble,“
   将键设置在左上方;
   设置xtics('pi / 2'0.25,'pi'0.5,'3pi / 2'0.75,'2pi'1.0);
   设定值('-2pi'-6.283,'-pi'-3.1415,'-pi / 2'-1.5708,'0'0,'pi / 2'1.5708,'pi'3.1415,'2pi'6.283);
   设置网格xtics ytics“]
  );

高温超导


1

这是一个bash小技巧,可让您直接在命令行上执行简单的算术运算。

alias calc='set -o noglob; docalc'
function docalc { perl -e "print STDOUT $*, \"\\n\""; set +o noglob; }

然后您可以做,例如

calc 3 * 15 + 5

不幸的是,它不能很好地用括号括起来。(如果我没记错的话,您也可以让tcsh接受这些,但是我不能说服bash参加。)

PS。您可以通过将perl调用替换为echo $(( $* )); 来依靠bash进行算术运算。但这将为您提供整数除法5/6,等等。Perl的算法更有用。

替代方法:如果您唯一需要使用python的牛肉import math,则以下是您的朋友:

% alias calc='python -i -c "from math import *"'
% calc
>>> 5 * atan(0.25)

0

另一种方法是使用类似Python 3的解释器:

$ python3
> from math import *
> 213/53*exp(0.8)/asin(3)
9.645423462356044

优点是,您可以编写所有内容的脚本,提供了许多功能(cmath如果需要复数,也可以导入),在大多数情况下无需设置任何精度,并且在大多数Linux安装中已经安装了python。

对于通用计算器,Python 3.x比Python 2.x更好,因为如果结果不是整数,则Python 3.x会进行浮点除法。

$ python3
> 3/2
1.5
$ python2
> 3/2
1

至少对我来说,主要的不利之处在于,如果没有很大或小的大小,并且没有格式字符串,则浮点数不会以科学计数法进行打印:

> exp(35)
1586013452313430.8
> "{:e}".format(exp(35))
'1.586013e+15'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.