使用 expr 和变量进行算术运算

使用 expr 和变量进行算术运算

为什么这个声明不起作用?

total=`expr $mPercent / 100 "*" .482 + $fPercent / 100 "*" .518`

mPercent 和 fPercent 一样,都是 awk 语句结果的数字。我还收到“expr:非数字参数”作为错误消息。

笔记:出于他的问题的目的,我们假设 2 个变量的值为 3.27。

答案1

bash不能进行浮点运算,只能进行整数运算。我建议改用bc -l

$ mPercent='2.72'
$ fPercent='3.14'
$ bc -l <<< $(echo "$mPercent / 100 "*" .482 + $fPercent / 100 "*" .518")
.02937560000000000000

答案2

expr命令只能进行整数或字符串操作。查看该指南的手册页:

操作数可以是整数,也可以是字符串。整数由一个或多个十进制数字组成,并带有可选的前导“-”。 'expr' 将出现在操作数位置的任何内容转换为整数或字符串,具体取决于对其应用的操作。

因此,要执行此类操作,您需要使用命令行计算器,例如bc.

例子

$ mPercent='.123'
$ fPercent='.345'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.00237996000000000000

笔记: expr不是 Bash 的一部分,它是一个独立的可执行文件,是 coreutils 包的一部分。在使用 RPM 的系统上,您可以看到如下内容:

$ rpm -qf $(type -p /usr/bin/expr)
coreutils-8.21-13.fc19.x86_64

使用您在 3.27 的注释中为 2 个变量提供的数据会产生以下结果:

$ mPercent='3.27'
$ fPercent='3.27'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.03270000000000000000

答案3

我的建议是用于bc算术运算和<<< (这里是字符串)用于将值输入到bc.

$ mPercent=3.27
$ fPercent=3.27

$ bc -l <<< "$mPercent / 100 * .482 + $fPercent / 100 * .518"
.03270000000000000000

这里的-l选项bc将允许您使用带有更多数学函数的浮点运算。

相关内容