diff --git a/currency/currency.module b/currency/currency.module
index 9273ef3..7846455 100644
--- a/currency/currency.module
+++ b/currency/currency.module
@@ -300,14 +300,13 @@ function currency_form_currency_amount_validate(array $element, array &$form_sta
   }
 
   // Confirm the amount lies within the allowed range.
-  // @todo Make sure comparing numeric strings works.
   $currency = currency_load($currency_code);
-  if ($element['#minimum_amount'] !== FALSE && $amount < $element['#minimum_amount']) {
+  if ($element['#minimum_amount'] !== FALSE && bccomp($element['#minimum_amount'], $amount) == 1) {
     form_error($element['amount'], t('The minimum amount is !amount.', array(
       '!amount' => $currency->format($element['#minimum_amount']),
     )));
   }
-  elseif ($element['#maximum_amount'] !== FALSE && $amount > $element['#maximum_amount']) {
+  elseif ($element['#maximum_amount'] !== FALSE && bccomp($amount, $element['#maximum_amount']) == 1) {
     form_error($element['amount'], t('The maximum amount is !amount.', array(
       '!amount' => $currency->format($element['#maximum_amount']),
     )));
diff --git a/currency/includes/Currency.inc b/currency/includes/Currency.inc
index 5f46562..23da37a 100644
--- a/currency/includes/Currency.inc
+++ b/currency/includes/Currency.inc
@@ -85,7 +85,7 @@ class Currency extends BartFeenstra\Currency\Currency {
     // If a rounding step was not set explicitely, the rounding step is equal
     // to one subunit.
     elseif (is_numeric($this->subunits)) {
-      return $this->subunits > 0 ? bvdiv(1, $this->subunits) : 1;
+      return $this->subunits > 0 ? bcdiv(1, $this->subunits) : 1;
     }
     else {
       return FALSE;
