Merge pull request #43098 from flavorjones/flavorjones-number-to-currency-detect-parse-failures

Fix number_to_currency regression in handling "-0.0"
This commit is contained in:
Jean Boussier 2021-08-26 15:45:13 +02:00 committed by GitHub
commit a3cfa4a20d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 12 deletions

View File

@ -8,23 +8,21 @@ module ActiveSupport
self.namespace = :currency
def convert
number = self.number.to_s.strip
format = options[:format]
if number.sub!(/^-/, "")
number_f = number.to_f.abs
if number_f == 0.0
# likely an alternate input format that failed to parse.
# see https://github.com/rails/rails/pull/39350
format = options[:negative_format]
else
number_f *= 10**options[:precision]
format = options[:negative_format] if number_f >= 0.5
number_f = valid_float?
if number_f
if number_f.negative?
number_f = number_f.abs
format = options[:negative_format] if (number_f * 10**options[:precision]) >= 0.5
end
number_s = NumberToRoundedConverter.convert(number_f, options)
else
number_s = number.to_s.strip
format = options[:negative_format] if number_s.sub!(/^-/, "")
end
rounded_number = NumberToRoundedConverter.convert(number, options)
format.gsub("%n", rounded_number).gsub("%u", options[:unit])
format.gsub("%n", number_s).gsub("%u", options[:unit])
end
private

View File

@ -88,6 +88,8 @@ module ActiveSupport
assert_equal("-$1,11", number_helper.number_to_currency("-1,11"))
assert_equal("-$0,11", number_helper.number_to_currency("-0,11"))
assert_equal("-$,11", number_helper.number_to_currency("-,11"))
assert_equal("$0.00", number_helper.number_to_currency(-0.0))
assert_equal("$0.00", number_helper.number_to_currency("-0.0"))
end
end