將給定的數字以逗號分隔的形式顯示出來
代碼:
#!/bin/bash # FILENAME: nicenum.sh # 可接受兩個選項:DD(decimal pointa,小數分隔符) # 和TD(thousands delimiter,千位分隔符) # niceNumber() { # 檢測輸入數字的小數分隔符是否與用戶請求的相同 sep="$(echo $1 | sed 's/[[:digit:]]//g')" echo $sep if [ ! -z "$sep" -a "$sep" != "$DD" ]; then echo "$0: Unknown decimal separator $sep encountered." >&2 exit 1 fi # 默認以"."爲小數分隔符 # 可通過-d指定其他小數分隔符 # 取出整數部分,即小數分隔符左側數字 int=$(echo $1 | cut "-d$DD" -f1) # 取出小數部分 decimal=$(echo $1 | cut "-d$DD" -f2) # 檢查輸入數字是否包含小數,有則保存 if [ "$decimal" != "$1" ]; then # 保存小數到result result="${DD:='.'}$decimal" fi thousands=$int while [ $thousands -gt 999 ]; do # 對整數進行求餘,以判斷3個最低有效數字 remainder=$(($thousands%1000)) while [ ${#remainder} -lt 3 ]; do # 加入前導數字0 remainder="0$remainder" done # 從右到左構建最終結果 result="${TD:=','}${remainder}$result" # 對1000求商,移除3個最低有效數字 thousands=$((thousands/1000)) done nicenum="${thousands}${result}" if [ ! -z $2 ]; then echo $nicenum fi } DD="." TD="," # main # 解析傳入參數 d,t while getopts "d:t:" opt; do case $opt in d) DD="$OPTARG" ;; t) TD="$OPTARG" ;; esac done shift $(($OPTIND - 1)) 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函數回顯輸出 niceNumber $1 1 exit 0
基本思路:
1、找出整數部分和小數部分 2、小數部分加上小數分隔符並保存待用 3、對大於1000的整數進行求餘得出最低3個位數,注意餘數不足3位需補0 4、再將大於1000的整數除於1000移除3個最低位有效數字 5、循環3-4步得出美化數字 6、可通過getopts自定義小數分隔符和千位分隔符