class Foraneus::Converters::Float
Constants
- DEFAULT_SEPARATOR
- DELIMITED_REGEX
Attributes
opts[R]
Public Class Methods
new(opts = {})
click to toggle source
@param [Hash] opts @option opts [String] delimiter Thousands delimiter. @option opts [String] separator Decimal
separator. @option opts [Integer] precision Minimum precision.
# File lib/foraneus/converters/float.rb, line 16 def initialize(opts = {}) @opts = opts @delimiter = opts[:delimiter] @precision = opts[:precision] @separator = opts[:separator] || DEFAULT_SEPARATOR end
Public Instance Methods
parse(s)
click to toggle source
@raise [ArgumentError] with message ‘invalid value for Float(): …’
@return [Float]
# File lib/foraneus/converters/float.rb, line 27 def parse(s) integer_part, fractional_part = split(s) Kernel.Float("#{integer_part}.#{fractional_part}") end
raw(v)
click to toggle source
# File lib/foraneus/converters/float.rb, line 33 def raw(v) left, right = v.to_s.split('.') join(left, right) end
Protected Instance Methods
join(left, right)
click to toggle source
Joins both integer and fractional parts.
It adds trailing zeros according to the current precision.
@param [Integer] left Integer
part @param [Integer] right Fractional part
@return [String]
# File lib/foraneus/converters/float.rb, line 48 def join(left, right) if @precision && right.length < @precision right = add_trailing_zeros(right, @precision - right.length) end if @delimiter left.gsub!(DELIMITED_REGEX) { "#{$1}#{@delimiter}" } end "#{left}#{@separator}#{right}" end
split(s)
click to toggle source
Splits a float representation into its integer and fractional parts.
@param [String] s
@return [Array [integer_part, fractional_part] ]
# File lib/foraneus/converters/float.rb, line 65 def split(s) parts = s.split(@separator) integer_part = parts[0] || '0' if @delimiter integer_part.gsub!(@delimiter, '') end fractional_part = parts[1] || '0' [integer_part, fractional_part] end
Private Instance Methods
add_trailing_zeros(s, n)
click to toggle source
# File lib/foraneus/converters/float.rb, line 80 def add_trailing_zeros(s, n) zeros = '0' * n "#{s}#{zeros}" end