比较四舍五入的一半数字



比较num1=172num2=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参数替换检查是否存在半向上的十进制后缀。然后,将01的错误码加到数字的整数前缀上,并输出和。

req(r)情商玫瑰ual)对两个数字运行rhup,比较它们,如果它们不相等,将$a设置为&";not ">,然后打印所需的条件英语句子。

两个函数都不对输入值进行错误检查。

相关内容

  • 没有找到相关文章

最新更新