diff --git a/currency/currency.install b/currency/currency.install
index 87bf6f0..739c974 100644
--- a/currency/currency.install
+++ b/currency/currency.install
@@ -37,6 +37,9 @@ function currency_schema() {
         'type' => 'varchar',
         'length' => 3,
       ),
+      'rounding_step' => array(
+        'type' => 'int',
+      ),
       'sign' => array(
         'type' => 'varchar',
         'length' => 255,
diff --git a/currency/currency.module b/currency/currency.module
index bddf7bb..80e4a1f 100644
--- a/currency/currency.module
+++ b/currency/currency.module
@@ -470,12 +470,21 @@ function currency_form_currency(array &$form, array &$form_state) {
 
   $form['subunits'] = array(
     '#default_value' => $currency->subunits,
-    '#element_validate' => array('currency_form_element_validate_numeric'),
+    '#element_validate' => array('element_validate_number'),
     '#required' => TRUE,
     '#size' => 3,
     '#title' => t('Number of subunits'),
     '#type' => 'textfield',
   );
+
+  $form['rounding_step'] = array(
+    '#default_value' => $currency->rounding_step,
+    '#element_validate' => array('element_validate_number'),
+    '#required' => TRUE,
+    '#size' => 5,
+    '#title' => t('Rounding step'),
+    '#type' => 'textfield',
+  );
 }
 
 /**
@@ -549,17 +558,6 @@ function currency_form_element_validate_iso_4217_number(array $element, array $f
 }
 
 /**
- * Implements Form API #element_validate callback.
- */
-function currency_form_element_validate_numeric(array $element, array $form, array &$form_state) {
-  if (!is_numeric($element['#value'])) {
-    form_error($element, t('@title should be numeric.', array(
-      '@title' => $element['#title'],
-    )));
-  }
-}
-
-/**
  * Implements hook_filter_info()'s process callback.
  */
 function currency_filter_currency_exchange_process($text, $filter, $format, $langcode, $cache, $cache_id) {
diff --git a/currency/includes/Currency.inc b/currency/includes/Currency.inc
index 09e4971..afb31a3 100644
--- a/currency/includes/Currency.inc
+++ b/currency/includes/Currency.inc
@@ -25,6 +25,15 @@ class Currency extends BartFeenstra\Currency\Currency {
   public $export_type = 0;
 
   /**
+   * The number of subunits to round amounts in this currency to.
+   *
+   * @see Currency::getRoundingStep()
+   *
+   * @var integer
+   */
+  public $rounding_step = NULL;
+
+  /**
    * Implements Ctools' exportables "table" property.
    *
    * @var string
@@ -61,4 +70,23 @@ class Currency extends BartFeenstra\Currency\Currency {
   function format($amount) {
     return CurrencyLocalePattern::loadFromEnv()->format($this, $amount);
   }
+
+  /**
+   * Returns the rounding step.
+   *
+   * @return int|float|false
+   */
+  function getRoundingStep() {
+    if (is_numeric($this->rounding_step)) {
+      return $this->rounding_step;
+    }
+    // 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;
+    }
+    else {
+      return FALSE;
+    }
+  }
 }
diff --git a/currency/includes/CurrencyAmountViewsHandlerField.inc b/currency/includes/CurrencyAmountViewsHandlerField.inc
index 740a354..570ec5d 100644
--- a/currency/includes/CurrencyAmountViewsHandlerField.inc
+++ b/currency/includes/CurrencyAmountViewsHandlerField.inc
@@ -32,6 +32,10 @@ class CurrencyAmountViewsHandlerField extends views_handler_field {
     $options['currency_code_field'] = array(
       'default' => !empty($this->definition['currency_code_field']) ? $this->definition['currency_code_field'] : '',
     );
+    // Whether to round amounts.
+    $options['currency_round'] = array(
+      'default' => FALSE,
+    );
 
     return $options;
   }
@@ -74,6 +78,11 @@ class CurrencyAmountViewsHandlerField extends views_handler_field {
       '#empty_value' => '',
       '#default_value' => $this->options['currency_code_field'],
     );
+    $form['currency_round'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Round amounts'),
+      '#default_value' => $this->options['currency_round'],
+    );
   }
 
   /**
@@ -84,6 +93,12 @@ class CurrencyAmountViewsHandlerField extends views_handler_field {
   function render($values) {
     $currency = $this->getCurrency($values);
     $amount = $this->getAmount($this->get_value($values));
+    if ($this->options['currency_round']) {
+      $rounding_step = $currency->getRoundingStep();
+      if ($rounding_step) {
+        $amount = round($amount / $rounding_step) * $rounding_step;
+      }
+    }
 
     return $currency->format($amount);
   }
diff --git a/currency/tests/CurrencyCRUDWebTestCase.test b/currency/tests/CurrencyCRUDWebTestCase.test
index 5a14e41..e5d53c8 100644
--- a/currency/tests/CurrencyCRUDWebTestCase.test
+++ b/currency/tests/CurrencyCRUDWebTestCase.test
@@ -75,7 +75,9 @@ class CurrencyCRUDWebTestCase extends DrupalWebTestCase {
     $currency->ISO4217Code = 'EUR';
     $currency->export_module = 'foo';
     $currency->export_type = EXPORT_IN_CODE;
+    $currency->rounding_step = 100;
     $currency->sign = 'bar';
+    $currency->subunits = 100;
     $currency->title = 'baz';
     ctools_export_crud_save('currency', $currency);
     $this->assertTrue($this->currencyExists($currency), 'Chaos tools correctly updates a currency.');
diff --git a/currency/tests/CurrencyUIWebTestCase.test b/currency/tests/CurrencyUIWebTestCase.test
index 3bd138a..050aff5 100644
--- a/currency/tests/CurrencyUIWebTestCase.test
+++ b/currency/tests/CurrencyUIWebTestCase.test
@@ -35,6 +35,7 @@ class CurrencyUIWebTestCase extends DrupalWebTestCase {
       'ISO4217Code' => 'ABC',
       'ISO4217Number' => '123',
       'title' => 'foo',
+      'rounding_step' => '1',
       'sign[sign]' => CURRENCY_SIGN_FORM_ELEMENT_CUSTOM_VALUE,
       'sign[sign_custom]' => 'foobar',
       'subunits' => 2,
@@ -49,6 +50,7 @@ class CurrencyUIWebTestCase extends DrupalWebTestCase {
     $invalid_values =  array(
       'ISO4217Code' => 'EUR',
       'ISO4217Number' => 'abc',
+      'rounding_step' => 'x',
       'subunits' => 'x',
     );
     foreach ($invalid_values as $name => $invalid_value) {
@@ -62,7 +64,7 @@ class CurrencyUIWebTestCase extends DrupalWebTestCase {
     }
 
     // Edit and save an existing currency.
-    $path = 'admin/config/regional/currency/list/EUR/edit';
+    $path = 'admin/config/regional/currency/list/ABC/edit';
     $this->drupalPost($path, array(), t('Save'));
     $this->assertUrl('admin/config/regional/currency');
   }
