Skip to content

Commit 1ed1ca8

Browse files
committed
refactor: src/math.sh
1 parent a27ed75 commit 1ed1ca8

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

src/math.sh

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
#!/usr/bin/env bash
2-
# shellcheck disable=SC2155
32

43
function math::calculate() {
4+
local expr="$*"
5+
56
if dependencies::has_bc; then
6-
echo "$*" | bc
7-
elif [[ "$*" == *.* ]] && dependencies::has_awk; then
8-
awk "BEGIN { print ($*) }"
9-
elif [[ "$*" == *.* ]]; then
10-
# Strip decimal parts and leading zeros
11-
local expression=$(echo "$*" | sed -E 's/([0-9]+)\.[0-9]+/\1/g' | sed -E 's/\b0*([1-9][0-9]*)/\1/g')
12-
local result=$(( expression ))
13-
echo "$result"
14-
else
15-
# Strip leading zeros even for purely integer math
16-
local expression=$(echo "$*" | sed -E 's/\b0*([1-9][0-9]*)/\1/g')
17-
local result=$(( expression ))
18-
echo "$result"
7+
echo "$expr" | bc
8+
return
9+
fi
10+
11+
if [[ "$expr" == *.* ]]; then
12+
if dependencies::has_awk; then
13+
awk "BEGIN { print ($expr) }"
14+
return
15+
fi
16+
# Downgrade to integer math by stripping decimals
17+
expr=$(echo "$expr" | sed -E 's/([0-9]+)\.[0-9]+/\1/g')
1918
fi
19+
20+
# Remove leading zeros from integers
21+
expr=$(echo "$expr" | sed -E 's/\b0*([1-9][0-9]*)/\1/g')
22+
23+
local result=$(( expr ))
24+
echo "$result"
2025
}

0 commit comments

Comments
 (0)