比较 bash 中的整数和小数

Comparing integers and decimals in bash

我正在尝试比较存储在 shell 脚本变量中的两个数字。 objective是判断传入的值是否在指定范围内:500-600700-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

该代码适用于 530540 等整数值,但适用于 530.2540.3 等小数值,导致此行出现语法错误代码:

 if (( " ${startrange[$inc]} " -lt " $actual " )); then

如何解决这个问题以处理小数值?

shell只能进行整数计算。如果要比较 non-integers 的值,则必须使用可以理解十进制数学的工具。 bc 就是这样一种选择:

if bc <<< "${startrange[inc]} < $actual"; then …

您似乎是在说您的代码适用于整数,但不适用于小数。

在那种情况下,您可以在进行比较之前将所有数字简单地转换为整数,以避免该错误。

这是 bash 中将小数转换为整数的一种方法:

DECIMAL=3.14
INTEGER=${DECIMAL%.*}

请注意,如果您使用此代码尝试将整数转换为整数,它会 return 相同的数字,因此您可以将此应用于您得到的任何数字,无论它是否为小数.