Module: ScreenshotScout::Internal::EcmaScriptNumberFormatter

Defined in:
lib/screenshotscout/internal/ecma_script_number_formatter.rb

Overview

Formats IEEE-754 values like JavaScript String(number) and JSON.stringify.

Class Method Summary collapse

Class Method Details

.format(value) ⇒ Object

Raises:

  • (ArgumentError)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/screenshotscout/internal/ecma_script_number_formatter.rb', line 9

def format(value)
  raise ArgumentError, "Expected a finite floating-point value." unless value.finite?
  return "0" if value.zero?

  encoded = value.to_s.downcase
  return normalize_decimal(encoded) unless encoded.include?("e")

  match = /\A(-?)([0-9])(?:\.([0-9]+))?e([+-]?[0-9]+)\z/.match(encoded)
  raise ArgumentError, "Unexpected floating-point encoding." if match.nil?

  negative = match[1] == "-"
  digits = (match[2] + match[3].to_s).sub(/0+\z/, "")
  digits = "0" if digits.empty?
  exponent = Integer(match[4], 10)
  number = expand_digits(digits, exponent)
  negative ? "-#{number}" : number
end