NBash

Форк
0
/
L10-nicenumber 
65 строк · 1.6 Кб
1
#!/bin/bash
2

3
DD="."
4
TD=","
5

6
nicenumber()
7
{
8
	integer=$(echo $1 | cut -d$DD -f1) # целая часть
9
	decimal=$(echo $1 | cut -d$DD -f2) # дробная часть
10

11
	# проверка на наличие дробной части
12
	if [ "$decimal" != "$1" ]; then
13
		result="$DD$decimal"
14
	fi
15

16
	thousands=$integer
17

18
	# формирование целой части с разделителями
19
	while [ $thousands -gt 999 ]; do
20
		remainder=$(($thousands % 1000))
21

22
		# добавление значащих нулей до полного разряда
23
		while [ ${#remainder} -lt 3 ]; do
24
			remainder="0$remainder"
25
			echo "remainder=$remainder"
26
		done
27

28
		result="$TD${remainder}${result}"
29
		echo "result=$result"
30

31
		thousands=$(($thousands / 1000))
32
		echo "thousands=$thousands"
33
	done
34

35
	nicenum="${thousands}${result}" # итоговое представление числа
36

37
	# вывод на печать при наличии второго параметра
38
	if [ ! -z $2 ]; then
39
		echo $nicenum
40
	fi
41
}
42

43
# Основной сценарий
44

45
# Обработка флагов
46
while getopts "d:t:" opt; do
47
	case $opt in
48
		d) DD="$OPTARG";;
49
		t) TD="$OPTARG";;
50
	esac
51
done
52
shift $(($OPTIND - 1)) # смещение индекса параметров на кол-во флагов
53

54
# Проверка ввода
55
if [ $# -eq 0 ]; then
56
	echo "Usage: $(basename $0) [-d c] [-t c] number"
57
	echo "-d - specifies the decimal point delimiter"
58
	echo "-t - specifies the thousands delimiter"
59
	exit 0
60
fi
61

62
# вызов функции обработки числа и вывод его на экран
63
nicenumber $1 1
64

65
exit 0

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.