diff --git a/README.md b/README.md index 8032be5..acbf9c2 100644 --- a/README.md +++ b/README.md @@ -894,21 +894,24 @@ var=$((var2 > var ? var2 : var)) is_float() { # Usage: is_float "number" - # The test checks to see that the input contains - # a '.'. This filters out whole numbers. - [ -z "${1##*.*}" ] && - printf %f "$1" >/dev/null 2>&1 + # Printing as '%d' must fail in order to filter out whole numbers; + # then printing as '%f' will succeed if and only if '$1' is a float. + # This works for both decimal point form (i.g. 3.14) and standard form + # (e.g. 314e-2). + { ! printf %d "$1" && printf %f "$1" ; } >/dev/null 2>&1 } ``` **Example Usage:** ```shell -$ is_float 1 && echo true -$ +$ is_float 3 && echo true -$ is_float 1.1 && echo true -$ true +$ is_float 3.14 && echo true +true + +$ is_float 314e-2 && echo true +true ``` ## Check if a number is an integer @@ -926,10 +929,9 @@ is_int() { ```shell $ is_int 1 && echo true -$ true +true $ is_int 1.1 && echo true -$ ``` # TRAPS