b7a92e6e7fb972590f9c18cca0b162166d15b15d
[khatus.git] / src / awk / lib / util.awk
1 function util_strip(s) {
2 sub("^ *", "", s)
3 sub(" *$", "", s)
4 return s
5 }
6
7 function util_round(n) {
8 return int(n + 0.5)
9 }
10
11 function util_ensure_numeric(n) {
12 return n + 0
13 }
14
15 #------------------------------------
16 # Why do we need util_ensure_numeric?
17 #------------------------------------
18 # awk appears to be guessing the type of an inputted scalar based on usage, so
19 # if we read-in a number, but did not use it in any numeric operations, but did
20 # use as a string (even in just a format string!) - it will be treated as a
21 # string and can lead to REALLY SURPRISING behavior in conditional statements,
22 # where smaller number may compare as greater than the bigger ones, such as.
23 #
24 # Demo:
25 #
26 # $ 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"}}'
27 # 75 < 100
28 # $ 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"}}'
29 # 75 > 100
30
31 # However, once used as a number, seems to stay that way even after being
32 # used as string:
33 #
34 # $ 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"}}'
35 # 75 < 100
36 #
37 # $ 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"}}'
38 # 75 < 100
39 #
40 # $ awk 'BEGIN {x = "75"; y = "100"; x + y; z = x y; if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}'
41 # 75 < 100
42 # $ awk 'BEGIN {x = "75"; y = "100"; z = x y; if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}'
43 # 75 > 100
This page took 0.072847 seconds and 3 git commands to generate.