|
@@ -0,0 +1,73 @@
|
|
|
+#!/bin/bash
|
|
|
+# nicenumber -- Отображает переданное число в формате представления с запятыми.
|
|
|
+# Предполагает наличие переменных DD (decimal point delimiter -- разделитель
|
|
|
+# дробной части) и TD (thousands delimiter -- разделитель групп разрядов).
|
|
|
+# Создает переменную nicenum с результатом, а при наличии второго аргумента
|
|
|
+# дополнительно выводит результат в стандартный вывод.
|
|
|
+nicenumber()
|
|
|
+{
|
|
|
+ # Обратите внимание: предполагается, что для разделения дробной и целой
|
|
|
+ # части во входном значении используется точка.
|
|
|
+ # В выходной строке в качестве такого разделителя используется точка, если
|
|
|
+ # пользователь не определил другой сивол с помощью флага -d.
|
|
|
+ integer=$(echo $1 | cut -d. -f1) # Слева от точки
|
|
|
+ decimal=$(echo $1 | cut -d. -f2) # Справа от точки
|
|
|
+
|
|
|
+ echo $integer
|
|
|
+ echo $decimal
|
|
|
+
|
|
|
+ # Проверить присутствие дробной части в числе.
|
|
|
+ if [ "$decimal" != "$1" ]; then
|
|
|
+ # Дробная часть есть, включить ее в результат.
|
|
|
+ result="${DD:= '.'}$decimal"
|
|
|
+ fi
|
|
|
+
|
|
|
+ thousands=$integer
|
|
|
+
|
|
|
+ while [ $thousands -gt 999 ]; do
|
|
|
+ remainder=$(($thousands % 1000)) # Три последние значимые цифры
|
|
|
+
|
|
|
+ # В 'remainder' должно быть три цифры. Требуется добавить ведущие нули?
|
|
|
+ while [ ${#remainder} -lt 3 ] ; do # Добавить ведущие нули
|
|
|
+ remainder="0$remainder"
|
|
|
+ done
|
|
|
+
|
|
|
+ result="${TS:=","}${remainder}${result}" # Конструировать справа налево
|
|
|
+ thousands=$(($thousands / 1000)) # Оставить остаток, если есть
|
|
|
+ done
|
|
|
+
|
|
|
+ nicenum="${thousands}${result}"
|
|
|
+ if [ ! -z $2 ] ; then
|
|
|
+ echo $nicenum
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+DD="." # Десятичная точка для разделения целой и дробной части
|
|
|
+TD="," # Разделитель групп разрядов
|
|
|
+
|
|
|
+# Начало основного сценария
|
|
|
+# ==================
|
|
|
+
|
|
|
+while getopts "d:t:" opt; do
|
|
|
+ case $opt in
|
|
|
+ d ) DD="$OPTARG" ;;
|
|
|
+ t ) DT="$OPTARG" ;;
|
|
|
+ esac
|
|
|
+done
|
|
|
+shift $(($OPTIND - 1))
|
|
|
+
|
|
|
+# Проверка ввода
|
|
|
+if [ $# -eq 0 ] ; then
|
|
|
+ echo "Usage: $(basename $0) [-d c] [-t c] number"
|
|
|
+ echo " -d specifies the decimal point delimiter"
|
|
|
+ echo " -t specifies the thousands delimiter"
|
|
|
+ exit 0
|
|
|
+fi
|
|
|
+
|
|
|
+nicenumber $1 1 # Второй аргумент заставляет nicenumber вывести результат.
|
|
|
+
|
|
|
+exit 0
|
|
|
+
|
|
|
+nicenumber $1
|
|
|
+
|
|
|
+exit 0
|