#!/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
