比较num1=172
和num2=172.8
的上半值,其中num2
的值为173
。
打印num1和num2是否相等
if (( $(echo "$num1 == $num2" | bc -l) )); then
echo "num1 and num2 are equal"
else
echo "number are not close to each other'
fi
使用https://en.wikipedia.org/wiki/Dynamic_programming。你的问题包括:
- 四舍五入到零小数
- 比较结果
第一部分可以在stackoverflow上找到,就像在Bash中舍入一个除数一样,第二部分可以用==
完成,甚至可以用字符串比较。
round() {
printf "%.${2:-0}f" "$1"
}
num1=172
num2=172.8
if (( $(round "$num1") == $(round "$num2") )); then
echo "Equal"
else
echo "Not equal"
fi
((
算术表达式是Bash shell特有的。
您可以使用相同的方法在bc
中比较它们。首先取一个舍入函数https://github.com/zg/bc/blob/master/code/funcs.bc,然后比较四舍五入的数字:
if (($(bc -l <<EOF
define int(x) { auto os;os=scale;scale=0;x/=1;scale=os;return(x) }
int($num1) == int($num2)
EOF
) )); then
没有bash
,没有外部utils,只有两个函数中的纯(丑陋的)POSIXshell代码:
rhup ()
{
[ "${1##*.[5-9]*}" ]
echo "$((${1%%.*}+$?))"
}
req ()
{
a=
[ "$(rhup "$1")" = "$(rhup "$2")" ] || a="not "
echo "When rounded half up $1 and $2 are ${a}equal."
}
演示:
req 2 3 ; req 2 2.2 ; req 2.4 2.5
输出:
When rounded half up 2 and 3 are not equal.
When rounded half up 2 and 2.2 are equal.
When rounded half up 2.4 and 2.5 are not equal.
工作原理:
给定一个数字rhup
(r的缩写)h 阿尔夫)使用shell参数替换检查是否存在半向上的十进制后缀。然后,将0
或1
的错误码加到数字的整数前缀上,并输出和。
req
(r)情商玫瑰ual)对两个数字运行rhup
,比较它们,如果它们不相等,将$a
设置为&";not ">,然后打印所需的条件英语句子。
两个函数都不对输入值进行错误检查。