+  if ($adjust) {
+    my $precision = SL::DB::Default->get->precision || 0.01;
+    # Round amounts to eight places before rounding to the requested
+    # number of places. This gets rid of errors due to internal floating
+    # point representation.
+    $amount = int($amount * 10**8 + .5 * ($amount <=> 0)) / 10**8  if $places < 8;
+    $amount = int($amount / $precision + ($amount <=> 0) * .5) * $precision;
+    $amount = int($amount * 10**$places + .5 * ($amount <=> 0)) / 10**$places;
+    return $amount;
+  }
+