summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/redmine/i18n.rb6
-rw-r--r--test/helpers/application_helper_test.rb15
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/redmine/i18n.rb b/lib/redmine/i18n.rb
index 83ecb05eb..0488fa289 100644
--- a/lib/redmine/i18n.rb
+++ b/lib/redmine/i18n.rb
@@ -92,12 +92,12 @@ module Redmine
def format_hours(hours)
return "" if hours.blank?
+ minutes = (hours * 60).round
if Setting.timespan_format == 'minutes'
- h = hours.floor
- m = ((hours - h) * 60).round
+ h, m = minutes.divmod(60)
"%d:%02d" % [h, m]
else
- number_with_delimiter(sprintf('%.2f', hours.to_f), delimiter: nil)
+ number_with_delimiter(sprintf('%.2f', minutes.fdiv(60)), delimiter: nil)
end
end
diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb
index 70c112732..8cb086f12 100644
--- a/test/helpers/application_helper_test.rb
+++ b/test/helpers/application_helper_test.rb
@@ -2204,6 +2204,21 @@ class ApplicationHelperTest < Redmine::HelperTest
end
end
+ def test_format_hours_rounds_to_nearest_minute
+ set_language_if_valid 'en'
+
+ # 7h 59m 29s (7.991388888888889) -> 7h 59m (7.98)
+ # 7h 59m 30s (7.991666666666667) -> 8h 0m (8.00)
+ with_settings :timespan_format => 'minutes' do
+ assert_equal '7:59', format_hours(7.991388888888889)
+ assert_equal '8:00', format_hours(7.991666666666667)
+ end
+ with_settings :timespan_format => 'decimal' do
+ assert_equal '7.98', format_hours(7.991388888888889)
+ assert_equal '8.00', format_hours(7.991666666666667)
+ end
+ end
+
def test_format_hours_should_use_locale_decimal_separator
to_test = {'en' => '0.75', 'de' => '0,75'}
with_settings :timespan_format => 'decimal' do