#!/usr/bin/perl -l

use POSIX ('ceil', 'floor');

sub round { $_[0] > 0 ? int $_[0] + 0.5 : int $_[0] - 0.5 }

# insert_dollar() sticks a '$' in front of the first digit.
#
sub insert_dollar { $num = shift; $num =~ s/^(\D*)(.*?)$/$1\$$2/; $num }

# Ignore fractions of a cent.
print insert_dollar(int( 1234.5678 * 100) / 100);    #  $1234.56
print insert_dollar(int(-1234.5678 * 100) / 100);    # -$1234.56
print insert_dollar(int( 5678.1234 * 100) / 100);    #  $5678.12
print insert_dollar(int(-5678.1234 * 100) / 100);    # -$5678.12

# Round down to the penny.
print insert_dollar(floor( 1234.5678 * 100) / 100);  #  $1234.56
print insert_dollar(floor(-1234.5678 * 100) / 100);  # -$1234.57
print insert_dollar(floor( 5678.1234 * 100) / 100);  #  $5678.12
print insert_dollar(floor(-5678.1234 * 100) / 100);  # -$5678.13

# Round up to the penny.
print insert_dollar(ceil( 1234.5678 * 100) / 100);   #  $1234.57
print insert_dollar(ceil(-1234.5678 * 100) / 100);   # -$1234.56
print insert_dollar(ceil( 5678.1234 * 100) / 100);   #  $5678.13
print insert_dollar(ceil(-5678.1234 * 100) / 100);   # -$5678.12

# Round to the nearest penny.
print insert_dollar(round( 1234.5678 * 100) / 100);  #  $1234.57
print insert_dollar(round(-1234.5678 * 100) / 100);  # -$1234.57
print insert_dollar(round( 5678.1234 * 100) / 100);  #  $5678.12
print insert_dollar(round(-5678.1234 * 100) / 100);  # -$5678.12
