/* _decimal.scss | MIT License | gist.github.com/terkel/4373420 */
/* Round a number to specified digits.
 *
 * @param  {Number} $number A number to round
 * @param  {Number} [$digits:0] Digits to output
 * @param  {String} [$mode:round] (round|ceil|floor) How to round a number
 * @return {Number} A rounded number
 * @example
 *     decimal-round(0.333)    => 0
 *     decimal-round(0.333, 1) => 0.3
 *     decimal-round(0.333, 2) => 0.33
 *     decimal-round(0.666)    => 1
 *     decimal-round(0.666, 1) => 0.7
 *     decimal-round(0.666, 2) => 0.67
 * */
decimal-round($number, $digits = 0, $mode = round)
  $n = 1
  if type-of($number) != number
    $number
  if type-of($digits) != number
    $number
  else if not unitless($digits)
    $number
  for $i in (1..$digits)
    $n = $n * 10
  if $mode == round
    round($number * $n) / $n
  else if $mode == ceil
    ceil($number * $n) / $n
  else if $mode == floor
    floor($number * $n) / $n
  else
    $number

/* Ceil a number to specified digits.
 *
 * @param  {Number} $number A number to round
 * @param  {Number} [$digits:0] Digits to output
 * @return {Number} A ceiled number
 * @example
 *     decimal-ceil(0.333)    => 1
 *     decimal-ceil(0.333, 1) => 0.4
 *     decimal-ceil(0.333, 2) => 0.34
 *     decimal-ceil(0.666)    => 1
 *     decimal-ceil(0.666, 1) => 0.7
 *     decimal-ceil(0.666, 2) => 0.67
 * */

decimal-ceil($number, $digits = 0)
  decimal-round($number, $digits, ceil)

/* Floor a number to specified digits.
 *
 * @param  {Number} $number A number to round
 * @param  {Number} [$digits:0] Digits to output
 * @return {Number} A floored number
 * @example
 *     decimal-floor(0.333)    => 0
 *     decimal-floor(0.333, 1) => 0.3
 *     decimal-floor(0.333, 2) => 0.33
 *     decimal-floor(0.666)    => 0
 *     decimal-floor(0.666, 1) => 0.6
 *     decimal-floor(0.666, 2) => 0.66
 * */
decimal-floor($number, $digits = 0)
  decimal-round($number, $digits, floor)
