为什么这个声明不起作用?
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
将允许您使用带有更多数学函数的浮点运算。