diff --git a/modules/price/commerce_price.module b/modules/price/commerce_price.module
index 7196429..5bc8068 100644
--- a/modules/price/commerce_price.module
+++ b/modules/price/commerce_price.module
@@ -623,7 +623,7 @@ function commerce_price_field_widget_form(&$form, &$form_state, $field, $instanc
 
     // Run it through number_format() to add the decimal places in if necessary.
     if (strpos($default_amount, '.') === FALSE || strpos($default_amount, '.') > strlen($default_amount) - $currency['decimals']) {
-      $default_amount = number_format($default_amount, $currency['decimals'], '.', '');
+      $default_amount = number_format($default_amount, $currency['decimals'], $currency['decimal_separator'], '');
     }
 
     $default_currency_code = $items[$delta]['currency_code'];
@@ -740,6 +740,12 @@ function commerce_price_field_widget_form(&$form, &$form_state, $field, $instanc
  */
 function commerce_price_field_widget_validate($element, &$form_state) {
   if ($element['amount']['#value'] !== '') {
+    // Get currency
+    $currency_code = $element['currency_code']['#value'];
+    $currency = commerce_currency_load($currency_code);
+    // Convert decimal separator from currency to default ('.')
+    $decimal_separator = $currency['decimal_separator'];
+    $element['amount']['#value'] = str_replace($decimal_separator, '.', $element['amount']['#value']);
     // Ensure the price is numeric.
     if (!is_numeric($element['amount']['#value'])) {
       form_error($element['amount'], t('%title: you must enter a numeric value for the price amount.', array('%title' => $element['amount']['#title'])));
