diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 61f62aeec..77e8ccfa1 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -250,6 +250,8 @@ module ApplicationHelper
     end
   end
 
+  # [xmera]: Changed float to accept localized delimiter and separator for
+  #          float values.
   # Helper that formats object for html or text rendering
   def format_object(object, html=true, &block)
     if block_given?
@@ -266,7 +268,10 @@ module ApplicationHelper
     when 'Fixnum'
       object.to_s
     when 'Float'
-      sprintf "%.2f", object
+      number_with_delimiter(object, delimiter: ::I18n.t('number.format.delimiter'), 
+                                    separator: ::I18n.t('number.format.separator'),
+                                    trip_insignificant_zeros: false,
+                                    precision: 2)
     when 'User', 'Group'
       html ? link_to_principal(object) : object.to_s
     when 'Project'
diff --git a/app/models/custom_field_value.rb b/app/models/custom_field_value.rb
index ee154af2c..b680eadeb 100644
--- a/app/models/custom_field_value.rb
+++ b/app/models/custom_field_value.rb
@@ -18,6 +18,9 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 class CustomFieldValue
+  # [xmera]: Includes Redmine::I18n#normalize_float 
+  include Redmine::I18n
+
   attr_accessor :custom_field, :customized, :value_was
   attr_reader   :value
 
@@ -63,9 +66,19 @@ class CustomFieldValue
     end
   end
 
+  # [xmera]: Changed value to be normalized. That is using dot instead
+  #          of comma as separator for float values.
   def validate_value
+    self.value = normalize_float(value) if float_as_string?
     custom_field.validate_custom_value(self).each do |message|
       customized.errors.add(custom_field.name, message)
     end
   end
+
+  # [xmera]: Checks whether the custom field is a float format and given as
+  #          string to avoid a normalization of string values from other custom
+  #          field formats.
+  def float_as_string?
+    self.custom_field.field_format == 'float' && self.value.is_a?(String)
+  end
 end
diff --git a/lib/redmine/field_format.rb b/lib/redmine/field_format.rb
index cc358ec03..856ad1006 100644
--- a/lib/redmine/field_format.rb
+++ b/lib/redmine/field_format.rb
@@ -538,7 +538,7 @@ module Redmine
 
       def validate_single_value(custom_field, value, customized=nil)
         errs = super
-        errs << ::I18n.t('activerecord.errors.messages.invalid') unless (Kernel.Float(value) rescue nil)
+        errs << ::I18n.t('activerecord.errors.messages.invalid') unless Kernel.Float(value, exception: false)
         errs
       end
 
diff --git a/lib/redmine/i18n.rb b/lib/redmine/i18n.rb
index 805e3c61c..23190679f 100644
--- a/lib/redmine/i18n.rb
+++ b/lib/redmine/i18n.rb
@@ -99,6 +99,18 @@ module Redmine
       end
     end
 
+    # [xmera]: Will consider language specific separator in user input
+    # and normalize them to a unified format to be accepted by Kernel.Float().
+    #
+    # @param value [String] A string represenation of a float value.
+    #
+    # @note The delimiter cannot be used here if it is a decimal point since it
+    #       will clash with the dot separator.
+    def normalize_float(value)
+      separator = ::I18n.t('number.format.separator')
+      value.gsub!(/[#{separator}]/, separator => '.')
+    end  
+
     def day_name(day)
       ::I18n.t('date.day_names')[day % 7]
     end
diff --git a/test/unit/lib/redmine/field_format/numeric_format_test.rb b/test/unit/lib/redmine/field_format/numeric_format_test.rb
index 7f95cd514..4cf680d67 100644
--- a/test/unit/lib/redmine/field_format/numeric_format_test.rb
+++ b/test/unit/lib/redmine/field_format/numeric_format_test.rb
@@ -23,6 +23,10 @@ require 'redmine/field_format'
 class Redmine::NumericFieldFormatTest < ActionView::TestCase
   include ApplicationHelper
 
+  fixtures :projects, :users, :issue_statuses, :enumerations,
+           :trackers, :projects_trackers, :roles, :member_roles,
+           :members, :enabled_modules
+
   def setup
     User.current = nil
   end
@@ -34,4 +38,26 @@ class Redmine::NumericFieldFormatTest < ActionView::TestCase
     assert_equal 3, field.format.formatted_custom_value(self, custom_value, false)
     assert_equal '<a class="external" href="http://foo/3">3</a>', field.format.formatted_custom_value(self, custom_value, true)
   end
+
+  # [xmera]: Should test localized float values (separator, delimiter)
+  def test_float_field_value_should_validate_when_given_with_various_separator
+    field = IssueCustomField.generate!(field_format: 'float')
+    issue = Issue.generate!(tracker: Tracker.find(1), status: IssueStatus.find(1), priority: IssuePriority.find(6))
+    ::I18n.locale = :de
+    assert field.format.validate_single_value(field, '3,33', issue)
+    ::I18n.locale = :en
+    assert field.format.validate_single_value(field, '3.33', issue)
+  end
+
+  # [xmera]: Should test localized float values (separator, delimiter)
+  def test_float_field_should_format_with_various_locale_separator_and_delimiter
+    field = IssueCustomField.generate!(field_format: 'float')
+    issue = Issue.generate!(tracker: Tracker.find(1), status: IssueStatus.find(1), priority: IssuePriority.find(6))
+    ::I18n.locale = :de
+    issue.custom_field_values = { field.id => '3333.33' }
+    issue.save!
+    assert_equal '3.333,33', format_object(issue.reload.custom_field_values.first, false)
+    ::I18n.locale = :en
+    assert_equal '3333.33', format_object(issue.reload.custom_field_values.first, false)
+  end
 end
