X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=v2%2Fsrc%2Fawk%2Flib%2Fnum.awk;fp=v2%2Fsrc%2Fawk%2Flib%2Fnum.awk;h=0000000000000000000000000000000000000000;hb=499c58a269a00e031302938b5a8f006f23aae451;hp=4c22f9d676b7f172d8e9ba785fc3170b6a761018;hpb=4c703fadbdc17d1753d16841582636598f862416;p=khatus.git diff --git a/v2/src/awk/lib/num.awk b/v2/src/awk/lib/num.awk deleted file mode 100644 index 4c22f9d..0000000 --- a/v2/src/awk/lib/num.awk +++ /dev/null @@ -1,37 +0,0 @@ -function num_round(n) { - return int(n + 0.5) -} - -function num_ensure_numeric(n) { - return n + 0 -} - -#----------------------------------- -# Why do we need num_ensure_numeric? -#----------------------------------- -# awk appears to be guessing the type of an inputted scalar based on usage, so -# if we read-in a number, but did not use it in any numeric operations, but did -# use as a string (even in just a format string!) - it will be treated as a -# string and can lead to REALLY SURPRISING behavior in conditional statements, -# where smaller number may compare as greater than the bigger ones, such as. -# -# Demo: -# -# $ awk 'BEGIN {x = "75"; y = "100"; sprintf("x: %d, y: %d\n", x, y); if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' -# 75 < 100 -# $ awk 'BEGIN {x = "75"; y = "100"; sprintf("x: %s, y: %d\n", x, y); if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' -# 75 > 100 - -# However, once used as a number, seems to stay that way even after being -# used as string: -# -# $ awk 'BEGIN {x = "75"; y = "100"; x + y; sprintf("x: %s, y: %d\n", x, y); if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' -# 75 < 100 -# -# $ awk 'BEGIN {x = "75"; y = "100"; x + y; sprintf("x: %s, y: %d\n", x, y); z = x y; if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' -# 75 < 100 -# -# $ awk 'BEGIN {x = "75"; y = "100"; x + y; z = x y; if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' -# 75 < 100 -# $ awk 'BEGIN {x = "75"; y = "100"; z = x y; if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' -# 75 > 100