比较 bash 中的整数和小数
Comparing integers and decimals in bash
我正在尝试比较存储在 shell 脚本变量中的两个数字。 objective是判断传入的值是否在指定范围内:500-600
或700-800
。
我当前的代码如下:
inc=0
srange[0]=500
erange[0]=600
srange[1]=700
erange[1]=800
for i in "${startrange[@]}"; do
if [[ " ${startrange[$inc]} " -lt " $actual " ]]; then
echo " in range "
fi
inc = $((inc+1))
done
该代码适用于 530
或 540
等整数值,但适用于 530.2
或 540.3
等小数值,导致此行出现语法错误代码:
if (( " ${startrange[$inc]} " -lt " $actual " )); then
如何解决这个问题以处理小数值?
shell只能进行整数计算。如果要比较 non-integers 的值,则必须使用可以理解十进制数学的工具。 bc
就是这样一种选择:
if bc <<< "${startrange[inc]} < $actual"; then …
您似乎是在说您的代码适用于整数,但不适用于小数。
在那种情况下,您可以在进行比较之前将所有数字简单地转换为整数,以避免该错误。
这是 bash 中将小数转换为整数的一种方法:
DECIMAL=3.14
INTEGER=${DECIMAL%.*}
请注意,如果您使用此代码尝试将整数转换为整数,它会 return 相同的数字,因此您可以将此应用于您得到的任何数字,无论它是否为小数.
我正在尝试比较存储在 shell 脚本变量中的两个数字。 objective是判断传入的值是否在指定范围内:500-600
或700-800
。
我当前的代码如下:
inc=0
srange[0]=500
erange[0]=600
srange[1]=700
erange[1]=800
for i in "${startrange[@]}"; do
if [[ " ${startrange[$inc]} " -lt " $actual " ]]; then
echo " in range "
fi
inc = $((inc+1))
done
该代码适用于 530
或 540
等整数值,但适用于 530.2
或 540.3
等小数值,导致此行出现语法错误代码:
if (( " ${startrange[$inc]} " -lt " $actual " )); then
如何解决这个问题以处理小数值?
shell只能进行整数计算。如果要比较 non-integers 的值,则必须使用可以理解十进制数学的工具。 bc
就是这样一种选择:
if bc <<< "${startrange[inc]} < $actual"; then …
您似乎是在说您的代码适用于整数,但不适用于小数。
在那种情况下,您可以在进行比较之前将所有数字简单地转换为整数,以避免该错误。
这是 bash 中将小数转换为整数的一种方法:
DECIMAL=3.14
INTEGER=${DECIMAL%.*}
请注意,如果您使用此代码尝试将整数转换为整数,它会 return 相同的数字,因此您可以将此应用于您得到的任何数字,无论它是否为小数.