-
Notifications
You must be signed in to change notification settings - Fork 0
/
04-nicenumber
66 lines (52 loc) · 1.96 KB
/
04-nicenumber
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/bin/bash
# nicenumber--Given a number, shows it in comma-separated form.
# Expects DD (decimal point delimiter) and TD (thousands delimiter)
# to be instantiated. Instantiates nicenum or, if a second arg is
# specified, the output is echoed to stdout.
nicenumber()
{
# Note that we assume that '.' is the decimal separator in
# the INPUT value to this script. The decimal separator in the output
# value is '.' unless specified by the user with the -d flag.
integer=$(echo $1 | cut -d. -f1) # left of the decimal
decimal=$(echo $1 | cut -d. -f2) # right of the decimal
# Check if our number has more than just the integer part.
if [ “$decimal” != “$1” ]; then
# There's a fractional part, so let's include it.
result="${DD:= '.'}$decimal"
fi
thousands=$integer
while [ $thousands -gt 999 ]; do
remainder=$(($thousands % 1000)) # three least significant digits
# We need ‘remainder’ to be three digits. Do we need to add zeroes?
while [ ${#remainder} -lt 3 ] ; do # Force leading zeros
remainder="0$remainder"
done
result="${TD:=","}${remainder}${result}" # Builds right to left
thousands=$(($thousands / 1000)) # To left of remainder, if any
done
nicenum="${thousands}${result}"
if [ ! -z $2 ] ; then
echo $nicenum
fi
}
#DD="." # Decimal point delimiter to separate whole and fractional values
#TD="," # Thousands delimiter, to separate every three digits
# BEGIN MAIN SCRIPT
# =================
#while getopts "d:t:" opt; do
# case $opt in
# d ) DD="$OPTARG" ;;
# t ) TD="$OPTARG" ;;
# esac
#done
#shift $(($OPTIND - 1))
# Input validation
#if [ $# -eq 0 ] ; then
# echo "Usage: $(basename $0) [-d c] [-t c] numeric_value"
# echo " -d specifies the decimal point delimiter (default '.')"
# echo " -t specifies the thousands delimiter (default ',')"
# exit 0
#fi
#nicenumber $1 1 # Second arg forces nicenumber to 'echo' output.
#exit 0