diff --git a/currency/composer.lock b/currency/composer.lock
index d1838b2..b3c2fc3 100644
--- a/currency/composer.lock
+++ b/currency/composer.lock
@@ -47,12 +47,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/bartfeenstra/currency.git",
-                "reference": "01c23d8054da46b1daa6106a83e28a1550c29821"
+                "reference": "ca2fcbcc90df95add7b5d55c6f1c507d00223186"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bartfeenstra/currency/zipball/01c23d8054da46b1daa6106a83e28a1550c29821",
-                "reference": "01c23d8054da46b1daa6106a83e28a1550c29821",
+                "url": "https://api.github.com/repos/bartfeenstra/currency/zipball/ca2fcbcc90df95add7b5d55c6f1c507d00223186",
+                "reference": "ca2fcbcc90df95add7b5d55c6f1c507d00223186",
                 "shasum": ""
             },
             "require-dev": {
@@ -62,7 +62,7 @@
                 "php": "To use the PHP helpers, you need PHP 5.3 or higher.",
                 "symfony/yaml": "To use the PHP helpers, you need symfony/yaml 2.1."
             },
-            "time": "2013-02-26 22:53:32",
+            "time": "2013-03-12 15:05:30",
             "type": "library",
             "autoload": {
                 "psr-0": {
diff --git a/currency/currency.install b/currency/currency.install
index e3e19cd..22e2c03 100644
--- a/currency/currency.install
+++ b/currency/currency.install
@@ -121,8 +121,8 @@ function currency_schema() {
         'not null' => TRUE,
       ),
       'rate' => array(
-        'type' => 'float',
-        'size' => 'normal',
+        'type' => 'varchar',
+        'length' => 255,
         'not null' => TRUE,
       ),
     ),
@@ -138,3 +138,17 @@ function currency_schema() {
 function currency_uninstall() {
   variable_del('currency_exchanger');
 }
+
+/**
+ * Implements hook_requirements().
+ */
+function currency_requirements($phase) {
+  $loaded = extension_loaded('BCMath');
+  $requirements['currency_extension_bcmath'] = array(
+    'title' => t('PHP BCMath extension'),
+    'value' => $loaded ? t('Loaded') : t('Not loaded'),
+    'severity' => $loaded ? REQUIREMENT_OK : REQUIREMENT_ERROR,
+  );
+
+  return $requirements;
+}
diff --git a/currency/currency.module b/currency/currency.module
index c19a189..9273ef3 100644
--- a/currency/currency.module
+++ b/currency/currency.module
@@ -22,6 +22,11 @@ define('CURRENCY_DEFAULT_LOCALE', 'en_US');
 define('CURRENCY_SIGN_FORM_ELEMENT_CUSTOM_VALUE', '###CUSTOM###');
 
 /**
+ * The number of decimals for BCMath calculations.
+ */
+define('CURRENCY_BCMATH_SCALE', 9);
+
+/**
  * Implements hook_hook_info().
  */
 function currency_hook_info() {
@@ -98,7 +103,7 @@ function currency_menu() {
  * Implements hook_element_info().
  */
 function currency_element_info() {
-  // An element to collect an amount of money and convert it to a float.
+  // An element to collect an amount of money and convert it to a numeric string.
   $elements['currency_amount'] = array(
     '#input' => TRUE,
     '#process' => array('currency_form_currency_amount_process'),
@@ -107,9 +112,9 @@ function currency_element_info() {
       'currency_code' => 'XXX',
     ),
     '#element_validate' => array('currency_form_currency_amount_validate'),
-    // The minimum amount as a float, or FALSE to omit.
+    // The minimum amount as a numeric string, or FALSE to omit.
     '#minimum_amount' => FALSE,
-    // The maximum amount as a float, or FALSE to omit.
+    // The maximum amount as a numeric string, or FALSE to omit.
     '#maximum_amount' => FALSE,
     // The ISO 4217 code of the currency the amount should be in. Use FALSE to
     // let users choose.
@@ -295,6 +300,7 @@ 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']) {
     form_error($element['amount'], t('The minimum amount is !amount.', array(
@@ -308,8 +314,8 @@ function currency_form_currency_amount_validate(array $element, array &$form_sta
   }
 
   // The amount in $form_state is a human-readable, optionally localized
-  // string, which cannot be used by other code. $amount is a float after
-  // running it through Input::parseAmount().
+  // string, which cannot be used by other code. $amount is a numeric string
+  // after running it through Input::parseAmount().
   form_set_value($element, array(
     'amount' => $amount,
     'currency_code' => $currency_code,
@@ -615,7 +621,7 @@ function _currency_filter_currency_exchange_process(array $matches) {
   }
 
   if ($rate = CurrencyExchanger::load($currency_code_from, $currency_code_to)) {
-    return $amount * $rate;
+    return bcmul($amount, $rate, CURRENCY_BCMATH_SCALE);
   }
   // The filter failed, so return the token.
   return $matches[0];
diff --git a/currency/includes/Currency.inc b/currency/includes/Currency.inc
index 2df6e81..5f46562 100644
--- a/currency/includes/Currency.inc
+++ b/currency/includes/Currency.inc
@@ -63,7 +63,8 @@ class Currency extends BartFeenstra\Currency\Currency {
    * This is a wrapper for CurrencyLocalePattern::format() in situations where
    * the environment's default locale pattern should be used.
    *
-   * @param float $amount
+   * @param string $amount
+   *   A numeric string.
    *
    * @return string
    */
@@ -74,7 +75,8 @@ class Currency extends BartFeenstra\Currency\Currency {
   /**
    * Returns the rounding step.
    *
-   * @return int|float|false
+   * @return string|false
+   *   The rounding step as a numeric string, or FALSE if unavailable.
    */
   function getRoundingStep() {
     if (is_numeric($this->rounding_step)) {
@@ -83,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 ? 1 / $this->subunits : 1;
+      return $this->subunits > 0 ? bvdiv(1, $this->subunits) : 1;
     }
     else {
       return FALSE;
diff --git a/currency/includes/CurrencyAmountViewsHandlerField.inc b/currency/includes/CurrencyAmountViewsHandlerField.inc
index 0f48e2e..87c0764 100644
--- a/currency/includes/CurrencyAmountViewsHandlerField.inc
+++ b/currency/includes/CurrencyAmountViewsHandlerField.inc
@@ -90,7 +90,7 @@ class CurrencyAmountViewsHandlerField extends views_handler_field {
     if ($this->options['currency_round']) {
       $rounding_step = $currency->getRoundingStep();
       if ($rounding_step) {
-        $amount = round($amount / $rounding_step) * $rounding_step;
+        $amount = bcmul(round(bcdiv($amount, $rounding_step, CURRENCY_BCMATH_SCALE)), $rounding_step, CURRENCY_BCMATH_SCALE);
       }
     }
 
@@ -131,21 +131,19 @@ class CurrencyAmountViewsHandlerField extends views_handler_field {
   }
 
   /**
-   * Gets this field's amount as a float.
+   * Gets this field's.
    *
    * If the amount cannot be fetched from your implementation's database field
-   * as a float or a format that can easily be parsed to a float, such as a
-   * string or an integer, you should override this method so it returns a
-   * float representation of the amount.
+   * as a numeric string, you should override this method so it returns a
+   * numeric/decimal representation of the amount.
    *
    * @param mixed $amount_value
    *   The amount as Views fetched it from the database.
    *
-   * @return float
+   * @return string
+   *   A numeric string.
    */
   function getAmount($amount_value) {
-    // Even if the amount is stored as a float, in most cases it is returned as
-    // a string, so cast it.
-    return (float) $amount_value;
+    return $amount_value;
   }
 }
diff --git a/currency/includes/CurrencyExchangerBartFeenstraCurrency.inc b/currency/includes/CurrencyExchangerBartFeenstraCurrency.inc
index 8e472ed..aff8bd3 100644
--- a/currency/includes/CurrencyExchangerBartFeenstraCurrency.inc
+++ b/currency/includes/CurrencyExchangerBartFeenstraCurrency.inc
@@ -26,7 +26,7 @@ class CurrencyExchangerBartFeenstraCurrency implements CurrencyExchangerInterfac
       $currency_to = new Currency();
       $currency_to->resourceLoad($currency_code_to);
       if ($currency_to && isset($currency_to->exchangeRates[$currency_code_from])) {
-        return 1 / $currency_to->exchangeRates[$currency_code_from];
+        return bcdiv(1, $currency_to->exchangeRates[$currency_code_from], CURRENCY_BCMATH_SCALE);
       }
     }
 
diff --git a/currency/includes/CurrencyExchangerFixedRates.inc b/currency/includes/CurrencyExchangerFixedRates.inc
index 4fc7c6d..7470001 100644
--- a/currency/includes/CurrencyExchangerFixedRates.inc
+++ b/currency/includes/CurrencyExchangerFixedRates.inc
@@ -22,7 +22,7 @@ class CurrencyExchangerFixedRates implements CurrencyExchangerInterface {
     // cached data would require additional checks when deleting rates, to see
     // if the they are reversed from other rates or are originals.
     elseif (isset($rates[$currency_code_to]) && isset($rates[$currency_code_to][$currency_code_from])) {
-      return 1 / $rates[$currency_code_to][$currency_code_from];
+      return bcdiv(1, $rates[$currency_code_to][$currency_code_from], CURRENCY_BCMATH_SCALE);
     }
     return FALSE;
   }
@@ -57,7 +57,7 @@ class CurrencyExchangerFixedRates implements CurrencyExchangerInterface {
         ->fields('ccfr')
         ->execute();
       foreach ($result as $row) {
-        $rates[$row->currency_code_from][$row->currency_code_to] = (float) $row->rate;
+        $rates[$row->currency_code_from][$row->currency_code_to] = $row->rate;
       }
     }
 
@@ -79,7 +79,7 @@ class CurrencyExchangerFixedRates implements CurrencyExchangerInterface {
    *
    * @param string $currency_code_from
    * @param string $currency_code_to
-   * @param int|float $rate
+   * @param string $rate
    *
    * @return int
    *   MergeQuery::STATUS_INSERT or MergeQuery::STATUS_UPDATE.
diff --git a/currency/includes/CurrencyExchangerInterface.inc b/currency/includes/CurrencyExchangerInterface.inc
index a024428..0d543e3 100644
--- a/currency/includes/CurrencyExchangerInterface.inc
+++ b/currency/includes/CurrencyExchangerInterface.inc
@@ -16,8 +16,8 @@ interface CurrencyExchangerInterface {
    * @param string $currency_code_from
    * @param string $currency_code_to
    *
-   * @return float|false
-   *   A float if the rate could be found, FALSE if it couldn't.
+   * @return string|false
+   *   A numeric string if the rate could be found, FALSE if it couldn't.
    */
   static function load($currency_code_from, $currency_code_to);
 
@@ -34,7 +34,7 @@ interface CurrencyExchangerInterface {
    * @return array
    *   Keys are the ISO 4217 codes of source currencies, values are arrays of
    *   which the keys are ISO 4217 codes of destination currencies and values
-   *   are the exchange rates as floats, or FALSE for combinations of
+   *   are the exchange rates as numeric strings, or FALSE for combinations of
    *   currencies for which no exchange rate could be found. Example:
    *   array(
    *     'EUR' => array(
diff --git a/currency/includes/CurrencyLocalePattern.inc b/currency/includes/CurrencyLocalePattern.inc
index 9316cad..b56ac1d 100644
--- a/currency/includes/CurrencyLocalePattern.inc
+++ b/currency/includes/CurrencyLocalePattern.inc
@@ -76,7 +76,8 @@ class CurrencyLocalePattern {
    * Formats an amount using this pattern.
    *
    * @param Currency $currency
-   * @param float $amount
+   * @param string $amount
+   *   A numeric string.
    *
    * @return string
    */
diff --git a/currency/tests/CurrencyAmountFormElementWebTestCase.test b/currency/tests/CurrencyAmountFormElementWebTestCase.test
index f79c189..905be78 100644
--- a/currency/tests/CurrencyAmountFormElementWebTestCase.test
+++ b/currency/tests/CurrencyAmountFormElementWebTestCase.test
@@ -42,7 +42,7 @@ class CurrencyAmountFormElementWebTestCase extends DrupalWebTestCase {
     $this->drupalPost($path, $values, t('Submit'));
     $this->assertUrl('user', array(), 'A valid value higher than an explicitely configured <em>#minimum_value</em> triggers form submission.');
     $this->assertRaw("\$form_state['amount'] = " . var_export(array(
-      'amount' => 50.95,
+      'amount' => '50.95',
       'currency_code' => 'EUR',
     ), TRUE));
 
@@ -55,7 +55,7 @@ class CurrencyAmountFormElementWebTestCase extends DrupalWebTestCase {
     $this->drupalPost($path . '/NLG', $values, t('Submit'));
     $this->assertUrl('user', array(), 'A valid value higher than an explicitely configured <em>#minimum_value</em> triggers form submission.');
     $this->assertRaw("\$form_state['amount'] = " . var_export(array(
-      'amount' => 50.95,
+      'amount' => '50.95',
       'currency_code' => 'NLG',
     ), TRUE));
 
diff --git a/currency/tests/CurrencyAmountViewsHandlerFieldWebTestCase.test b/currency/tests/CurrencyAmountViewsHandlerFieldWebTestCase.test
index e2053e9..d2630ce 100644
--- a/currency/tests/CurrencyAmountViewsHandlerFieldWebTestCase.test
+++ b/currency/tests/CurrencyAmountViewsHandlerFieldWebTestCase.test
@@ -45,8 +45,8 @@ class CurrencyAmountViewsHandlerFieldWebTestCase extends ViewsSqlTest {
     $fields = array('amount_currency_code_option', 'amount_currency_code_field_option', 'amount_currency_code_definition', 'amount_currency_code_field_definition', 'amount_currency_undefined');
     foreach ($fields as $field) {
       $schema['views_test']['fields'][$field] = array(
-        'type' => 'float',
-        'size' => 'big',
+        'type' => 'varchar',
+        'length' => 255,
       );
     }
 
@@ -82,7 +82,6 @@ class CurrencyAmountViewsHandlerFieldWebTestCase extends ViewsSqlTest {
       'help' => t('Amount'),
       'field' => array(
         'handler' => 'CurrencyAmountViewsHandlerField',
-        'float' => TRUE,
       ),
     );
     $data['views_test']['amount_currency_code_field_option'] = array(
@@ -90,7 +89,6 @@ class CurrencyAmountViewsHandlerFieldWebTestCase extends ViewsSqlTest {
       'help' => t('Amount'),
       'field' => array(
         'handler' => 'CurrencyAmountViewsHandlerField',
-        'float' => TRUE,
       ),
     );
     $data['views_test']['amount_currency_code_definition'] = array(
@@ -98,7 +96,6 @@ class CurrencyAmountViewsHandlerFieldWebTestCase extends ViewsSqlTest {
       'help' => t('Amount'),
       'field' => array(
         'handler' => 'CurrencyAmountViewsHandlerField',
-        'float' => TRUE,
         'currency_code' => 'EUR',
       ),
     );
@@ -107,7 +104,6 @@ class CurrencyAmountViewsHandlerFieldWebTestCase extends ViewsSqlTest {
       'help' => t('Amount'),
       'field' => array(
         'handler' => 'CurrencyAmountViewsHandlerField',
-        'float' => TRUE,
         'currency_code' => 'UAH',
         'currency_code_field' => 'views_test_currency_code',
       ),
@@ -117,7 +113,6 @@ class CurrencyAmountViewsHandlerFieldWebTestCase extends ViewsSqlTest {
       'help' => t('Amount'),
       'field' => array(
         'handler' => 'CurrencyAmountViewsHandlerField',
-        'float' => TRUE,
       ),
     );
 
diff --git a/currency/tests/CurrencyConverterBartFeenstraCurrencyWebTestCase.test b/currency/tests/CurrencyConverterBartFeenstraCurrencyWebTestCase.test
index 91d572a..50caa74 100644
--- a/currency/tests/CurrencyConverterBartFeenstraCurrencyWebTestCase.test
+++ b/currency/tests/CurrencyConverterBartFeenstraCurrencyWebTestCase.test
@@ -34,10 +34,10 @@ class CurrencyExchangerBartFeenstraCurrencyWebTestCase extends DrupalWebTestCase
   function testCurrencyExchangerBartFeenstraCurrency() {
     // Test CurrencyExchangerBartFeenstraCurrency::load().
     // Test an available exchange rate.
-    $this->assertEqual(CurrencyExchangerBartFeenstraCurrency::load('EUR', 'NLG'), 2.20371);
+    $this->assertIdentical(CurrencyExchangerBartFeenstraCurrency::load('EUR', 'NLG'), '2.20371');
     // Test an unavailable exchange rate for which the reverse rate is
     // available.
-    $this->assertEqual(round(CurrencyExchangerBartFeenstraCurrency::load('NLG', 'EUR'), 5), 0.45378);
+    $this->assertIdentical(round(CurrencyExchangerBartFeenstraCurrency::load('NLG', 'EUR'), 5), '0.45378');
 
     // Test CurrencyExchangerBartFeenstraCurrency::loadMultiple().
     // Test an available exchange rate.
@@ -46,7 +46,7 @@ class CurrencyExchangerBartFeenstraCurrencyWebTestCase extends DrupalWebTestCase
     ));
     $this->assertTrue(isset($rates['EUR']));
     $this->assertTrue(isset($rates['EUR']['NLG']));
-    $this->assertEqual($rates['EUR']['NLG'], 2.20371);
+    $this->assertIdentical($rates['EUR']['NLG'], '2.20371');
     // Test an unavailable exchange rate for which the reverse rate is
     // available.
     $rates = CurrencyExchangerBartFeenstraCurrency::loadMultiple(array(
@@ -54,6 +54,6 @@ class CurrencyExchangerBartFeenstraCurrencyWebTestCase extends DrupalWebTestCase
     ));
     $this->assertTrue(isset($rates['NLG']));
     $this->assertTrue(isset($rates['NLG']['EUR']));
-    $this->assertEqual(round($rates['NLG']['EUR'], 5), 0.45378);
+    $this->assertIdentical(round($rates['NLG']['EUR'], 5), '0.45378');
   }
 }
\ No newline at end of file
diff --git a/currency/tests/CurrencyConverterFixedRatesUIWebTestCase.test b/currency/tests/CurrencyConverterFixedRatesUIWebTestCase.test
index 4614e33..759f463 100644
--- a/currency/tests/CurrencyConverterFixedRatesUIWebTestCase.test
+++ b/currency/tests/CurrencyConverterFixedRatesUIWebTestCase.test
@@ -44,23 +44,23 @@ class CurrencyExchangerFixedRatesUIWebTestCase extends DrupalWebTestCase {
     $currency_code_to = 'NLG';
 
     // Test adding a exchange rate.
-    $rate = 3;
+    $rate = '3';
     $values = array(
       'currency_code_from' => $currency_code_from,
       'currency_code_to' => $currency_code_to,
       'rate[amount]' => $rate,
     );
     $this->drupalPost($path . '/add', $values, t('Save'));
-    $this->assertEqual(CurrencyExchangerFixedRates::load($currency_code_from, $currency_code_to), $rate);
+    $this->assertIdentical(CurrencyExchangerFixedRates::load($currency_code_from, $currency_code_to), $rate);
 
     // Test editing a exchange rate.
-    $rate = 6;
+    $rate = '6';
     $values = array(
       'rate[amount]' => $rate,
     );
     $this->drupalPost($path . '/' . $currency_code_from . '/' . $currency_code_to, $values, t('Save'));
     drupal_static_reset('CurrencyExchangerFixedRates');
-    $this->assertEqual(CurrencyExchangerFixedRates::load($currency_code_from, $currency_code_to), $rate);
+    $this->assertIdentical(CurrencyExchangerFixedRates::load($currency_code_from, $currency_code_to), $rate);
 
     // Test deleting a exchange rate.
     $this->drupalPost($path . '/' . $currency_code_from . '/' . $currency_code_to, $values, t('Delete'));
diff --git a/currency/tests/CurrencyConverterFixedRatesWebTestCase.test b/currency/tests/CurrencyConverterFixedRatesWebTestCase.test
index 0afec1c..b192ca1 100644
--- a/currency/tests/CurrencyConverterFixedRatesWebTestCase.test
+++ b/currency/tests/CurrencyConverterFixedRatesWebTestCase.test
@@ -38,10 +38,10 @@ class CurrencyExchangerFixedRatesWebTestCase extends DrupalWebTestCase {
 
     // Test CurrencyExchangerFixedRates::load().
     // Test an available exchange rate.
-    $this->assertEqual(CurrencyExchangerFixedRates::load('EUR', 'NLG'), 5);
+    $this->assertIdentical(CurrencyExchangerFixedRates::load('EUR', 'NLG'), '5');
     // Test an unavailable exchange rate for which the reverse rate is
     // available.
-    $this->assertEqual(CurrencyExchangerFixedRates::load('NLG', 'EUR'), 0.2);
+    $this->assertIdentical(CurrencyExchangerFixedRates::load('NLG', 'EUR'), '0.2');
     // Test an unavailable exchange rate for no the reverse rate is
     // available.
     $this->assertFalse(CurrencyExchangerFixedRates::load('NLG', 'XXX'));
@@ -54,12 +54,12 @@ class CurrencyExchangerFixedRatesWebTestCase extends DrupalWebTestCase {
     // Test an available exchange rate.
     $this->assertTrue(isset($rates['EUR']));
     $this->assertTrue(isset($rates['EUR']['NLG']));
-    $this->assertEqual($rates['EUR']['NLG'], 5);
+    $this->assertIdentical($rates['EUR']['NLG'], '5');
     // Test an unavailable exchange rate for which the reverse rate is
     // available.
     $this->assertTrue(isset($rates['NLG']));
     $this->assertTrue(isset($rates['NLG']['EUR']));
-    $this->assertEqual($rates['NLG']['EUR'], 0.2);
+    $this->assertIdentical($rates['NLG']['EUR'], '0.2');
     // Test an unavailable exchange rate for which the no rate is
     // available.
     $this->assertTrue(isset($rates['EUR']));
@@ -73,6 +73,6 @@ class CurrencyExchangerFixedRatesWebTestCase extends DrupalWebTestCase {
     // Test the reverse of the deleted exchange rate.
     $this->assertFalse(CurrencyExchangerFixedRates::load('NLG', 'EUR'));
     // Test an available exchange rate.
-    $this->assertEqual(CurrencyExchangerFixedRates::load('EUR', 'UAH'), 7);
+    $this->assertIdentical(CurrencyExchangerFixedRates::load('EUR', 'UAH'), '7');
   }
 }
\ No newline at end of file
diff --git a/currency/tests/CurrencyConverterWebTestCase.test b/currency/tests/CurrencyConverterWebTestCase.test
index 9a3989f..fef36a0 100644
--- a/currency/tests/CurrencyConverterWebTestCase.test
+++ b/currency/tests/CurrencyConverterWebTestCase.test
@@ -71,11 +71,11 @@ class CurrencyExchangerWebTestCase extends DrupalWebTestCase {
 
     // Make sure the first exchanger has a rate on EUR>NLG, so it has
     // priority over the second exchanger's rate for these currencies.
-    CurrencyExchangerFixedRates::save('EUR', 'NLG', 7);
+    CurrencyExchangerFixedRates::save('EUR', 'NLG', '7');
 
     // Test CurrencyExchanger::load().
-    $this->assertEqual(CurrencyExchanger::load('EUR', 'NLG'), 7);
-    $this->assertEqual(CurrencyExchanger::load('EUR', 'DEM'), 1.95583);
+    $this->assertIdentical(CurrencyExchanger::load('EUR', 'NLG'), '7');
+    $this->assertIdentical(CurrencyExchanger::load('EUR', 'DEM'), '1.95583');
     $this->assertFalse(CurrencyExchanger::load('EUR', 'XXX'));
 
     // Test CurrencyExchanger::loadMultiple().
@@ -84,9 +84,9 @@ class CurrencyExchangerWebTestCase extends DrupalWebTestCase {
     ));
     $this->assertTrue(isset($rates['EUR']));
     $this->assertTrue(isset($rates['EUR']['NLG']));
-    $this->assertEqual($rates['EUR']['NLG'], 7);
+    $this->assertIdentical($rates['EUR']['NLG'], '7');
     $this->assertTrue(isset($rates['EUR']['DEM']));
-    $this->assertEqual($rates['EUR']['DEM'], 1.95583);
+    $this->assertIdentical($rates['EUR']['DEM'], '1.95583');
     $this->assertTrue(isset($rates['EUR']['XXX']));
     $this->assertFalse($rates['EUR']['XXX']);
   }
@@ -96,7 +96,7 @@ class CurrencyExchangerWebTestCase extends DrupalWebTestCase {
    */
   function assertIdenticalCurrencyExchangeRates() {
     // Test CurrencyExchanger::load().
-    $this->assertEqual(CurrencyExchanger::load('EUR', 'EUR'), 1);
+    $this->assertIdentical(CurrencyExchanger::load('EUR', 'EUR'), '1');
 
     // Test CurrencyExchanger::loadMultiple().
     $rates = CurrencyExchanger::loadMultiple(array(
@@ -104,6 +104,6 @@ class CurrencyExchangerWebTestCase extends DrupalWebTestCase {
     ));
     $this->assertTrue(isset($rates['EUR']));
     $this->assertTrue(isset($rates['EUR']['EUR']));
-    $this->assertEqual($rates['EUR']['EUR'], 1);
+    $this->assertIdentical($rates['EUR']['EUR'], '1');
   }
 }
diff --git a/currency/vendor/autoload.php b/currency/vendor/autoload.php
index 1c2a311..cc9a62e 100644
--- a/currency/vendor/autoload.php
+++ b/currency/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInitc48ce7b287b9fd92778579dbdfafc691::getLoader();
+return ComposerAutoloaderInit8559cbe23a6e3f1480fa3e42eb750cfd::getLoader();
diff --git a/currency/vendor/bartfeenstra/currency/resources/ARA.yaml b/currency/vendor/bartfeenstra/currency/resources/ARA.yaml
index 0cbd57e..fcdc6da 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ARA.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ARA.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ARP: 1000
+    ARP: '1000'
 ISO4217Code: ARA
 ISO4217Number: null
 sign: ₳
diff --git a/currency/vendor/bartfeenstra/currency/resources/ARL.yaml b/currency/vendor/bartfeenstra/currency/resources/ARL.yaml
index c76afbb..185cce9 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ARL.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ARL.yaml
@@ -1,7 +1,7 @@
 alternativeSigns:
     - $L
 exchangeRates:
-    ARM: 100
+    ARM: '100'
 ISO4217Code: ARL
 ISO4217Number: null
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/ARP.yaml b/currency/vendor/bartfeenstra/currency/resources/ARP.yaml
index 09f3565..e6e5422 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ARP.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ARP.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ARL: 10000
+    ARL: '10000'
 ISO4217Code: ARP
 ISO4217Number: null
 sign: $a
diff --git a/currency/vendor/bartfeenstra/currency/resources/ARS.yaml b/currency/vendor/bartfeenstra/currency/resources/ARS.yaml
index e028830..d858f8f 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ARS.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ARS.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ARA: 10000
+    ARA: '10000'
 ISO4217Code: ARS
 ISO4217Number: '032'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/BGN.yaml b/currency/vendor/bartfeenstra/currency/resources/BGN.yaml
index 9aca4de..f8cef0f 100644
--- a/currency/vendor/bartfeenstra/currency/resources/BGN.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/BGN.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    BGL: 1000
+    BGL: '1000'
 ISO4217Code: BGN
 ISO4217Number: '975'
 sign: лв
diff --git a/currency/vendor/bartfeenstra/currency/resources/BRB.yaml b/currency/vendor/bartfeenstra/currency/resources/BRB.yaml
index 508b435..3392f83 100644
--- a/currency/vendor/bartfeenstra/currency/resources/BRB.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/BRB.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    BRZ: 1000
+    BRZ: '1000'
 ISO4217Code: BRB
 ISO4217Number: null
 sign: ₢
diff --git a/currency/vendor/bartfeenstra/currency/resources/BRC.yaml b/currency/vendor/bartfeenstra/currency/resources/BRC.yaml
index 0b3764b..0b82b7f 100644
--- a/currency/vendor/bartfeenstra/currency/resources/BRC.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/BRC.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    BRB: 1000
+    BRB: '1000'
 ISO4217Code: BRC
 ISO4217Number: null
 sign: Cz$
diff --git a/currency/vendor/bartfeenstra/currency/resources/BRE.yaml b/currency/vendor/bartfeenstra/currency/resources/BRE.yaml
index 5f0691c..2d99628 100644
--- a/currency/vendor/bartfeenstra/currency/resources/BRE.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/BRE.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    BRN: 1
+    BRN: '1'
 ISO4217Code: BRE
 ISO4217Number: null
 sign: ₢
diff --git a/currency/vendor/bartfeenstra/currency/resources/BRL.yaml b/currency/vendor/bartfeenstra/currency/resources/BRL.yaml
index 9a85460..23fe1f2 100644
--- a/currency/vendor/bartfeenstra/currency/resources/BRL.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/BRL.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    BRR: 2750
+    BRR: '2750'
 ISO4217Code: BRL
 ISO4217Number: '986'
 sign: R$
diff --git a/currency/vendor/bartfeenstra/currency/resources/BRN.yaml b/currency/vendor/bartfeenstra/currency/resources/BRN.yaml
index 7c1d23a..13039ff 100644
--- a/currency/vendor/bartfeenstra/currency/resources/BRN.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/BRN.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    BRC: 1000
+    BRC: '1000'
 ISO4217Code: BRN
 ISO4217Number: null
 sign: NCz$
diff --git a/currency/vendor/bartfeenstra/currency/resources/BRR.yaml b/currency/vendor/bartfeenstra/currency/resources/BRR.yaml
index 05f8e79..7ca567e 100644
--- a/currency/vendor/bartfeenstra/currency/resources/BRR.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/BRR.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    BRE: 1000
+    BRE: '1000'
 ISO4217Code: BRR
 ISO4217Number: null
 sign: CR$
diff --git a/currency/vendor/bartfeenstra/currency/resources/BYR.yaml b/currency/vendor/bartfeenstra/currency/resources/BYR.yaml
index a215707..e7fe98b 100644
--- a/currency/vendor/bartfeenstra/currency/resources/BYR.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/BYR.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    BYB: 1000
+    BYB: '1000'
 ISO4217Code: BYR
 ISO4217Number: '974'
 sign: Br
diff --git a/currency/vendor/bartfeenstra/currency/resources/CAD.yaml b/currency/vendor/bartfeenstra/currency/resources/CAD.yaml
index b032a87..3b178bd 100644
--- a/currency/vendor/bartfeenstra/currency/resources/CAD.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/CAD.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    NFD: 1
+    NFD: '1'
 ISO4217Code: CAD
 ISO4217Number: '124'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/CLP.yaml b/currency/vendor/bartfeenstra/currency/resources/CLP.yaml
index 92d61f6..e674473 100644
--- a/currency/vendor/bartfeenstra/currency/resources/CLP.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/CLP.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    CLE: 1000
+    CLE: '1000'
 ISO4217Code: CLP
 ISO4217Number: '152'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/EUR.yaml b/currency/vendor/bartfeenstra/currency/resources/EUR.yaml
index 0bbd758..306cd10 100644
--- a/currency/vendor/bartfeenstra/currency/resources/EUR.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/EUR.yaml
@@ -1,28 +1,28 @@
 alternativeSigns: {  }
 exchangeRates:
-    ATS: 13.7603
-    BEF: 40.3399
-    CYP: 0.585274
-    DEM: 1.95583
-    EEK: 15.6466
-    ESP: 166.386
-    FIM: 5.94573
-    FRF: 6.55957
-    GRD: 340.75
-    IEP: 0.787564
-    ITL: 1.93627
-    LUF: 40.3399
-    LVL: 0.702804
-    LTL: 3.4528
-    MCF: 6.55957
-    MTL: 0.4293
-    NLG: 2.20371
-    PTE: 200.482
-    SIT: 239.64
-    SKK: 30.126
-    SML: 1.93627
-    VAL: 1.93627
-    XEU: 1
+    ATS: '13.7603'
+    BEF: '40.3399'
+    CYP: '0.585274'
+    DEM: '1.95583'
+    EEK: '15.6466'
+    ESP: '166.386'
+    FIM: '5.94573'
+    FRF: '6.55957'
+    GRD: '340.75'
+    IEP: '0.787564'
+    ITL: '1.93627'
+    LUF: '40.3399'
+    LVL: '0.702804'
+    LTL: '3.4528'
+    MCF: '6.55957'
+    MTL: '0.4293'
+    NLG: '2.20371'
+    PTE: '200.482'
+    SIT: '239.64'
+    SKK: '30.126'
+    SML: '1.93627'
+    VAL: '1.93627'
+    XEU: '1'
 ISO4217Code: EUR
 ISO4217Number: '978'
 sign: €
diff --git a/currency/vendor/bartfeenstra/currency/resources/GNF.yaml b/currency/vendor/bartfeenstra/currency/resources/GNF.yaml
index a348c4d..dd7d57a 100644
--- a/currency/vendor/bartfeenstra/currency/resources/GNF.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/GNF.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    GNS: 1
+    GNS: '1'
 ISO4217Code: GNF
 ISO4217Number: '324'
 sign: ₣
diff --git a/currency/vendor/bartfeenstra/currency/resources/HRD.yaml b/currency/vendor/bartfeenstra/currency/resources/HRD.yaml
index 5c5ac9b..678dccc 100644
--- a/currency/vendor/bartfeenstra/currency/resources/HRD.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/HRD.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    YUN: 1
+    YUN: '1'
 ISO4217Code: HRD
 ISO4217Number: null
 sign: ¤
diff --git a/currency/vendor/bartfeenstra/currency/resources/HRK.yaml b/currency/vendor/bartfeenstra/currency/resources/HRK.yaml
index 59a8726..1706846 100644
--- a/currency/vendor/bartfeenstra/currency/resources/HRK.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/HRK.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    HRD: 1000
+    HRD: '1000'
 ISO4217Code: HRK
 ISO4217Number: '191'
 sign: kn
diff --git a/currency/vendor/bartfeenstra/currency/resources/ILS.yaml b/currency/vendor/bartfeenstra/currency/resources/ILS.yaml
index 1757c06..92b5361 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ILS.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ILS.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ILR: 1000
+    ILR: '1000'
 ISO4217Code: ILS
 ISO4217Number: '376'
 sign: ₪
diff --git a/currency/vendor/bartfeenstra/currency/resources/ISK.yaml b/currency/vendor/bartfeenstra/currency/resources/ISK.yaml
index 052098f..b2863f2 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ISK.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ISK.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ISJ: 100
+    ISJ: '100'
 ISO4217Code: ISK
 ISO4217Number: '352'
 sign: kr
diff --git a/currency/vendor/bartfeenstra/currency/resources/KGS.yaml b/currency/vendor/bartfeenstra/currency/resources/KGS.yaml
index 6cab27d..823dd12 100644
--- a/currency/vendor/bartfeenstra/currency/resources/KGS.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/KGS.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    SUR: 200
+    SUR: '200'
 ISO4217Code: KGS
 ISO4217Number: '417'
 sign: ¤
diff --git a/currency/vendor/bartfeenstra/currency/resources/KRW.yaml b/currency/vendor/bartfeenstra/currency/resources/KRW.yaml
index 50bde32..ceac745 100644
--- a/currency/vendor/bartfeenstra/currency/resources/KRW.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/KRW.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    KRH: 10
+    KRH: '10'
 ISO4217Code: KRW
 ISO4217Number: '410'
 sign: ₩
diff --git a/currency/vendor/bartfeenstra/currency/resources/LTL.yaml b/currency/vendor/bartfeenstra/currency/resources/LTL.yaml
index ecb2ee3..26d6d37 100644
--- a/currency/vendor/bartfeenstra/currency/resources/LTL.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/LTL.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    LTT: 100
+    LTT: '100'
 ISO4217Code: LTL
 ISO4217Number: '440'
 sign: Lt
diff --git a/currency/vendor/bartfeenstra/currency/resources/LTT.yaml b/currency/vendor/bartfeenstra/currency/resources/LTT.yaml
index 8a702ab..1a47e53 100644
--- a/currency/vendor/bartfeenstra/currency/resources/LTT.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/LTT.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    SUR: 1
+    SUR: '1'
 ISO4217Code: LTT
 ISO4217Number: null
 sign: ¤
diff --git a/currency/vendor/bartfeenstra/currency/resources/LVL.yaml b/currency/vendor/bartfeenstra/currency/resources/LVL.yaml
index 5cf04ad..9fda14a 100644
--- a/currency/vendor/bartfeenstra/currency/resources/LVL.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/LVL.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    LVR: 200
+    LVR: '200'
 ISO4217Code: LVL
 ISO4217Number: '428'
 sign: Ls
diff --git a/currency/vendor/bartfeenstra/currency/resources/MDC.yaml b/currency/vendor/bartfeenstra/currency/resources/MDC.yaml
index de63df8..c1f2381 100644
--- a/currency/vendor/bartfeenstra/currency/resources/MDC.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/MDC.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    SUR: 1
+    SUR: '1'
 ISO4217Code: MDC
 ISO4217Number: null
 sign: ¤
diff --git a/currency/vendor/bartfeenstra/currency/resources/MDL.yaml b/currency/vendor/bartfeenstra/currency/resources/MDL.yaml
index 462f21b..8154abc 100644
--- a/currency/vendor/bartfeenstra/currency/resources/MDL.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/MDL.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    MDC: 1000
+    MDC: '1000'
 ISO4217Code: MDL
 ISO4217Number: '498'
 sign: ¤
diff --git a/currency/vendor/bartfeenstra/currency/resources/MGA.yaml b/currency/vendor/bartfeenstra/currency/resources/MGA.yaml
index 2eefeb8..1cbda3b 100644
--- a/currency/vendor/bartfeenstra/currency/resources/MGA.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/MGA.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    MGF: 5
+    MGF: '5'
 ISO4217Code: MGA
 ISO4217Number: '969'
 sign: Ar
diff --git a/currency/vendor/bartfeenstra/currency/resources/MXN.yaml b/currency/vendor/bartfeenstra/currency/resources/MXN.yaml
index d1a641b..a6a3199 100644
--- a/currency/vendor/bartfeenstra/currency/resources/MXN.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/MXN.yaml
@@ -1,7 +1,7 @@
 alternativeSigns:
     - N$
 exchangeRates:
-    MXP: 1000
+    MXP: '1000'
 ISO4217Code: MXN
 ISO4217Number: '484'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/MZM.yaml b/currency/vendor/bartfeenstra/currency/resources/MZM.yaml
index 9f4ee61..fd1b1bc 100644
--- a/currency/vendor/bartfeenstra/currency/resources/MZM.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/MZM.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    MZE: 1
+    MZE: '1'
 ISO4217Code: MZM
 ISO4217Number: '508'
 sign: MT
diff --git a/currency/vendor/bartfeenstra/currency/resources/MZN.yaml b/currency/vendor/bartfeenstra/currency/resources/MZN.yaml
index 9d8ae31..e88d109 100644
--- a/currency/vendor/bartfeenstra/currency/resources/MZN.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/MZN.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    MZM: 1000
+    MZM: '1000'
 ISO4217Code: MZN
 ISO4217Number: '943'
 sign: MT
diff --git a/currency/vendor/bartfeenstra/currency/resources/PEI.yaml b/currency/vendor/bartfeenstra/currency/resources/PEI.yaml
index 112c5d2..a9873d3 100644
--- a/currency/vendor/bartfeenstra/currency/resources/PEI.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/PEI.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    PEH: 1000
+    PEH: '1000'
 ISO4217Code: PEI
 ISO4217Number: null
 sign: I/.
diff --git a/currency/vendor/bartfeenstra/currency/resources/PEN.yaml b/currency/vendor/bartfeenstra/currency/resources/PEN.yaml
index 0bf540c..a056fa3 100644
--- a/currency/vendor/bartfeenstra/currency/resources/PEN.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/PEN.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    PEI: 1000000
+    PEI: '1000000'
 ISO4217Code: PEN
 ISO4217Number: '604'
 sign: S/.
diff --git a/currency/vendor/bartfeenstra/currency/resources/PLN.yaml b/currency/vendor/bartfeenstra/currency/resources/PLN.yaml
index ceda97c..450c5b3 100644
--- a/currency/vendor/bartfeenstra/currency/resources/PLN.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/PLN.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    PLZ: 10000
+    PLZ: '10000'
 ISO4217Code: PLN
 ISO4217Number: '985'
 sign: zł
diff --git a/currency/vendor/bartfeenstra/currency/resources/RON.yaml b/currency/vendor/bartfeenstra/currency/resources/RON.yaml
index ef98032..53000a8 100644
--- a/currency/vendor/bartfeenstra/currency/resources/RON.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/RON.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ROL: 10000
+    ROL: '10000'
 ISO4217Code: RON
 ISO4217Number: '946'
 sign: ¤
diff --git a/currency/vendor/bartfeenstra/currency/resources/RUB.yaml b/currency/vendor/bartfeenstra/currency/resources/RUB.yaml
index 7eaff9e..64ccf24 100644
--- a/currency/vendor/bartfeenstra/currency/resources/RUB.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/RUB.yaml
@@ -1,8 +1,8 @@
 alternativeSigns:
     - руб
 exchangeRates:
-    SUR: 1000
-    RUR: 1000
+    SUR: '1000'
+    RUR: '1000'
 ISO4217Code: RUB
 ISO4217Number: '643'
 sign: ''
diff --git a/currency/vendor/bartfeenstra/currency/resources/SDD.yaml b/currency/vendor/bartfeenstra/currency/resources/SDD.yaml
index dbfbf7b..bc31d5c 100644
--- a/currency/vendor/bartfeenstra/currency/resources/SDD.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/SDD.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    SDP: 10
+    SDP: '10'
 ISO4217Code: SDD
 ISO4217Number: '736'
 sign: ₤Sd
diff --git a/currency/vendor/bartfeenstra/currency/resources/SDG.yaml b/currency/vendor/bartfeenstra/currency/resources/SDG.yaml
index 4722164..0b0c0db 100644
--- a/currency/vendor/bartfeenstra/currency/resources/SDG.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/SDG.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    SDD: 100
+    SDD: '100'
 ISO4217Code: SDG
 ISO4217Number: '938'
 sign: ₤
diff --git a/currency/vendor/bartfeenstra/currency/resources/SSP.yaml b/currency/vendor/bartfeenstra/currency/resources/SSP.yaml
index 2bacc49..6ce8e84 100644
--- a/currency/vendor/bartfeenstra/currency/resources/SSP.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/SSP.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    SDG: 1
+    SDG: '1'
 ISO4217Code: SSP
 ISO4217Number: '728'
 sign: ₤
diff --git a/currency/vendor/bartfeenstra/currency/resources/TJS.yaml b/currency/vendor/bartfeenstra/currency/resources/TJS.yaml
index d4388ae..d43d2fa 100644
--- a/currency/vendor/bartfeenstra/currency/resources/TJS.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/TJS.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    TJR: 1000
+    TJR: '1000'
 ISO4217Code: TJS
 ISO4217Number: '972'
 sign: ¤
diff --git a/currency/vendor/bartfeenstra/currency/resources/TRY.yaml b/currency/vendor/bartfeenstra/currency/resources/TRY.yaml
index 3b79e5e..d87f0c8 100644
--- a/currency/vendor/bartfeenstra/currency/resources/TRY.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/TRY.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    TRL: 1000000
+    TRL: '1000000'
 ISO4217Code: TRY
 ISO4217Number: '949'
 sign: TL
diff --git a/currency/vendor/bartfeenstra/currency/resources/UAH.yaml b/currency/vendor/bartfeenstra/currency/resources/UAH.yaml
index c5a7930..13fd461 100644
--- a/currency/vendor/bartfeenstra/currency/resources/UAH.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/UAH.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    UAK: 100000
+    UAK: '100000'
 ISO4217Code: UAH
 ISO4217Number: '980'
 sign: ₴
diff --git a/currency/vendor/bartfeenstra/currency/resources/UGX.yaml b/currency/vendor/bartfeenstra/currency/resources/UGX.yaml
index 31862ad..b1f587d 100644
--- a/currency/vendor/bartfeenstra/currency/resources/UGX.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/UGX.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    UGS: 100
+    UGS: '100'
 ISO4217Code: UGX
 ISO4217Number: '800'
 sign: USh
diff --git a/currency/vendor/bartfeenstra/currency/resources/USD.yaml b/currency/vendor/bartfeenstra/currency/resources/USD.yaml
index 73b22e4..f4b7fd1 100644
--- a/currency/vendor/bartfeenstra/currency/resources/USD.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/USD.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ECS: 25000
+    ECS: '25000'
 ISO4217Code: USD
 ISO4217Number: '840'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/UYU.yaml b/currency/vendor/bartfeenstra/currency/resources/UYU.yaml
index 0388760..3ea780b 100644
--- a/currency/vendor/bartfeenstra/currency/resources/UYU.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/UYU.yaml
@@ -1,7 +1,7 @@
 alternativeSigns:
     - $U
 exchangeRates:
-    UYN: 1000
+    UYN: '1000'
 ISO4217Code: UYU
 ISO4217Number: '858'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/VEF.yaml b/currency/vendor/bartfeenstra/currency/resources/VEF.yaml
index 5492946..0d1000a 100644
--- a/currency/vendor/bartfeenstra/currency/resources/VEF.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/VEF.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    VEB: 1000
+    VEB: '1000'
 ISO4217Code: VEF
 ISO4217Number: '937'
 sign: Bs
diff --git a/currency/vendor/bartfeenstra/currency/resources/YUG.yaml b/currency/vendor/bartfeenstra/currency/resources/YUG.yaml
index ef5c775..1846617 100644
--- a/currency/vendor/bartfeenstra/currency/resources/YUG.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/YUG.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    YUO: 1000000000
+    YUO: '1000000000'
 ISO4217Code: YUG
 ISO4217Number: null
 sign: дин
diff --git a/currency/vendor/bartfeenstra/currency/resources/YUO.yaml b/currency/vendor/bartfeenstra/currency/resources/YUO.yaml
index 3632a43..0292ab7 100644
--- a/currency/vendor/bartfeenstra/currency/resources/YUO.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/YUO.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    YUR: 1000000
+    YUR: '1000000'
 ISO4217Code: YUO
 ISO4217Number: null
 sign: дин
diff --git a/currency/vendor/bartfeenstra/currency/resources/YUR.yaml b/currency/vendor/bartfeenstra/currency/resources/YUR.yaml
index 56ca5a0..408071f 100644
--- a/currency/vendor/bartfeenstra/currency/resources/YUR.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/YUR.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    YUN: 10
+    YUN: '10'
 ISO4217Code: YUR
 ISO4217Number: null
 sign: дин
diff --git a/currency/vendor/bartfeenstra/currency/resources/ZRN.yaml b/currency/vendor/bartfeenstra/currency/resources/ZRN.yaml
index 8304954..91f469f 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ZRN.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ZRN.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ZRZ: 3000000
+    ZRZ: '3000000'
 ISO4217Code: ZRN
 ISO4217Number: '180'
 sign: Ƶ
diff --git a/currency/vendor/bartfeenstra/currency/resources/ZWD.yaml b/currency/vendor/bartfeenstra/currency/resources/ZWD.yaml
index 8d5e524..715e2c8 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ZWD.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ZWD.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    RHD: 1
+    RHD: '1'
 ISO4217Code: ZWD
 ISO4217Number: '716'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/ZWL.yaml b/currency/vendor/bartfeenstra/currency/resources/ZWL.yaml
index 2fe379d..b130632 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ZWL.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ZWL.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ZWR: 1000000000000
+    ZWR: '1000000000000'
 ISO4217Code: ZWL
 ISO4217Number: '932'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/ZWN.yaml b/currency/vendor/bartfeenstra/currency/resources/ZWN.yaml
index 5f923f6..be1cb85 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ZWN.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ZWN.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ZWD: 1000
+    ZWD: '1000'
 ISO4217Code: ZWN
 ISO4217Number: '942'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/resources/ZWR.yaml b/currency/vendor/bartfeenstra/currency/resources/ZWR.yaml
index 24e94f8..897b23d 100644
--- a/currency/vendor/bartfeenstra/currency/resources/ZWR.yaml
+++ b/currency/vendor/bartfeenstra/currency/resources/ZWR.yaml
@@ -1,6 +1,6 @@
 alternativeSigns: {  }
 exchangeRates:
-    ZWN: 10000000000
+    ZWN: '10000000000'
 ISO4217Code: ZWR
 ISO4217Number: '935'
 sign: $
diff --git a/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Currency/Currency.php b/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Currency/Currency.php
index 54548a0..e3cce1f 100644
--- a/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Currency/Currency.php
+++ b/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Currency/Currency.php
@@ -26,7 +26,7 @@ class Currency {
    * Exchange rates to other currencies.
    *
    * @var array
-   *   Keys are ISO 4217 codes, values are integers or floats.
+   *   Keys are ISO 4217 codes, values are numeric strings.
    */
   public $exchangeRates = array();
 
diff --git a/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Currency/Input.php b/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Currency/Input.php
index 69854c8..3554458 100644
--- a/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Currency/Input.php
+++ b/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Currency/Input.php
@@ -27,23 +27,22 @@ class Input {
    *
    * @throws AmountNotNumericException
    *
-   * @param integer|float|string $amount
-   *   Any numeric value, or a string in an optionally localized format.
+   * @param string|int|float $amount
+   *   Any optionally localized numeric value.
    *
-   * @return float
+   * @return string
+   *   A numeric string.
    */
   public static function parseAmount($amount) {
-    if (is_numeric($amount)) {
-      return (float) $amount;
-    }
-    $amount = self::parseAmountDecimalSeparator($amount);
-    $amount = self::parseAmountNegativeFormat($amount);
-    if (is_numeric($amount)) {
-      return (float) $amount;
+    if (!is_numeric($amount)) {
+      $amount = self::parseAmountDecimalSeparator($amount);
+      $amount = self::parseAmountNegativeFormat($amount);
     }
-    else {
+    if (!is_numeric($amount)) {
       throw new AmountNotNumericException('The amount could not be interpreted as a numeric string.');
     }
+
+    return (string) $amount;
   }
 
   /**
@@ -52,6 +51,7 @@ class Input {
    * @throws AmountInvalidDecimalSeparatorException
    *
    * @param string $amount
+   *   Any optionally localized numeric value.
    *
    * @return string
    *   The amount with its decimal separator replaced by a period.
diff --git a/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Tests/Currency/InputTest.php b/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Tests/Currency/InputTest.php
index 5a5592a..032dd2b 100644
--- a/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Tests/Currency/InputTest.php
+++ b/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Tests/Currency/InputTest.php
@@ -47,23 +47,23 @@ class InputTest extends \PHPUnit_Framework_TestCase {
     }
     $amounts_valid = array(
       // Integers.
-      array(123, 123.0),
+      array(123, '123'),
       // Floats.
-      array(123.456, 123.456),
-      array(-123.456, -123.456),
+      array(123.456, '123.456'),
+      array(-123.456, '-123.456'),
       // Integer strings.
-      array('123', 123.0),
-      // Float strings using different decimal separators.
-      array('123.456', 123.456),
-      array('123,456', 123.456),
-      array('123٫456', 123.456),
-      array('123/456', 123.456),
+      array('123', '123'),
+      // Decimal strings using different decimal separators.
+      array('123.456', '123.456'),
+      array('123,456', '123.456'),
+      array('123٫456', '123.456'),
+      array('123/456', '123.456'),
       // Negative strings.
-      array('-123', -123.0),
-      array('(123)', -123.0),
-      array('123-', -123.0),
-      array('--123', 123.0),
-      array('(--123-)', 123.0),
+      array('-123', '-123'),
+      array('(123)', '-123'),
+      array('123-', '-123'),
+      array('--123', '123'),
+      array('(--123-)', '123'),
     );
     foreach ($amounts_valid as $amount) {
       $amount_validated = NULL;
diff --git a/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Tests/Currency/ResourcesTest.php b/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Tests/Currency/ResourcesTest.php
new file mode 100644
index 0000000..1402bb4
--- /dev/null
+++ b/currency/vendor/bartfeenstra/currency/src/BartFeenstra/Tests/Currency/ResourcesTest.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains class \BartFeenstra\Tests\Currency\Resources.
+ */
+
+namespace BartFeenstra\Tests\Currency;
+
+use BartFeenstra\Currency\Currency;
+
+require_once __DIR__ . '/../../../../vendor/autoload.php';
+
+/**
+ * Tests resource files.
+ */
+class Resources extends \PHPUnit_Framework_TestCase {
+
+  /**
+   * Tests resource integrity.
+   */
+  function testResourceIntegrity() {
+    foreach (Currency::resourceListAll() as $ISO4217Code) {
+      $currency = new Currency();
+      $currency->resourceLoad($ISO4217Code);
+      foreach ($currency->exchangeRates as $exchange_rate) {
+        $this->assertInternalType('string', $exchange_rate);
+        $this->assertTrue(is_numeric($exchange_rate));
+      }
+    }
+  }
+}
diff --git a/currency/vendor/composer/autoload_real.php b/currency/vendor/composer/autoload_real.php
index 9c22ccd..c3b7e9d 100644
--- a/currency/vendor/composer/autoload_real.php
+++ b/currency/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php generated by Composer
 
-class ComposerAutoloaderInitc48ce7b287b9fd92778579dbdfafc691
+class ComposerAutoloaderInit8559cbe23a6e3f1480fa3e42eb750cfd
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitc48ce7b287b9fd92778579dbdfafc691
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInitc48ce7b287b9fd92778579dbdfafc691', 'loadClassLoader'));
+        spl_autoload_register(array('ComposerAutoloaderInit8559cbe23a6e3f1480fa3e42eb750cfd', 'loadClassLoader'));
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInitc48ce7b287b9fd92778579dbdfafc691', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit8559cbe23a6e3f1480fa3e42eb750cfd', 'loadClassLoader'));
 
         $vendorDir = dirname(__DIR__);
         $baseDir = dirname($vendorDir);
diff --git a/currency/vendor/composer/installed.json b/currency/vendor/composer/installed.json
index f4fda2a..dbd4c34 100644
--- a/currency/vendor/composer/installed.json
+++ b/currency/vendor/composer/installed.json
@@ -42,33 +42,30 @@
         ]
     },
     {
-        "name": "bartfeenstra/currency",
-        "version": "1.x-dev",
-        "version_normalized": "1.9999999.9999999.9999999-dev",
+        "name": "symfony/yaml",
+        "version": "v2.1.8",
+        "version_normalized": "2.1.8.0",
+        "target-dir": "Symfony/Component/Yaml",
         "source": {
             "type": "git",
-            "url": "https://github.com/bartfeenstra/currency.git",
-            "reference": "01c23d8054da46b1daa6106a83e28a1550c29821"
+            "url": "https://github.com/symfony/Yaml.git",
+            "reference": "v2.1.8"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/bartfeenstra/currency/zipball/01c23d8054da46b1daa6106a83e28a1550c29821",
-            "reference": "01c23d8054da46b1daa6106a83e28a1550c29821",
+            "url": "https://api.github.com/repos/symfony/Yaml/zipball/v2.1.8",
+            "reference": "v2.1.8",
             "shasum": ""
         },
-        "require-dev": {
-            "phpunit/phpunit": "3.7.*"
-        },
-        "suggest": {
-            "php": "To use the PHP helpers, you need PHP 5.3 or higher.",
-            "symfony/yaml": "To use the PHP helpers, you need symfony/yaml 2.1."
+        "require": {
+            "php": ">=5.3.3"
         },
-        "time": "2013-02-26 22:53:32",
+        "time": "2013-01-27 16:12:43",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "BartFeenstra": "src"
+                "Symfony\\Component\\Yaml": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -77,38 +74,45 @@
         ],
         "authors": [
             {
-                "name": "Bart Feenstra",
-                "email": "bart@mynameisbart.com",
-                "homepage": "http://mynameisbart.com",
-                "role": "Developer"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
             }
-        ]
+        ],
+        "description": "Symfony Yaml Component",
+        "homepage": "http://symfony.com"
     },
     {
-        "name": "symfony/yaml",
-        "version": "v2.1.8",
-        "version_normalized": "2.1.8.0",
-        "target-dir": "Symfony/Component/Yaml",
+        "name": "bartfeenstra/currency",
+        "version": "1.x-dev",
+        "version_normalized": "1.9999999.9999999.9999999-dev",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Yaml.git",
-            "reference": "v2.1.8"
+            "url": "https://github.com/bartfeenstra/currency.git",
+            "reference": "ca2fcbcc90df95add7b5d55c6f1c507d00223186"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Yaml/zipball/v2.1.8",
-            "reference": "v2.1.8",
+            "url": "https://api.github.com/repos/bartfeenstra/currency/zipball/ca2fcbcc90df95add7b5d55c6f1c507d00223186",
+            "reference": "ca2fcbcc90df95add7b5d55c6f1c507d00223186",
             "shasum": ""
         },
-        "require": {
-            "php": ">=5.3.3"
+        "require-dev": {
+            "phpunit/phpunit": "3.7.*"
         },
-        "time": "2013-01-27 16:12:43",
+        "suggest": {
+            "php": "To use the PHP helpers, you need PHP 5.3 or higher.",
+            "symfony/yaml": "To use the PHP helpers, you need symfony/yaml 2.1."
+        },
+        "time": "2013-03-12 15:05:30",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Yaml": ""
+                "BartFeenstra": "src"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -117,15 +121,11 @@
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Bart Feenstra",
+                "email": "bart@mynameisbart.com",
+                "homepage": "http://mynameisbart.com",
+                "role": "Developer"
             }
-        ],
-        "description": "Symfony Yaml Component",
-        "homepage": "http://symfony.com"
+        ]
     }
 ]
diff --git a/currency_exchange_rate_db_table/currency_exchange_rate_db_table.install b/currency_exchange_rate_db_table/currency_exchange_rate_db_table.install
index 30c7b31..123d350 100644
--- a/currency_exchange_rate_db_table/currency_exchange_rate_db_table.install
+++ b/currency_exchange_rate_db_table/currency_exchange_rate_db_table.install
@@ -21,8 +21,8 @@ function currency_exchange_rate_db_table_schema() {
         'length' => 3,
       ),
       'rate' => array(
-        'type' => 'float',
-        'size' => 'big',
+        'type' => 'varchar',
+        'length' => 255,
         'not null' => TRUE,
       ),
     ),
