class CldrPlurals::RubyRuntime::StrNum
Attributes
exp[R]
frac[R]
int[R]
sign[R]
Public Class Methods
from_string(str)
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 5 def self.from_string(str) sign, int, frac, exp = str.scan(/([+-])?(\d+)\.?(\d+)?[eEcC]?(-?\d+)?/).flatten new(sign || '', int, frac || '', exp.to_i) end
new(sign, int, frac, exp)
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 12 def initialize(sign, int, frac, exp) @sign = sign @int = int @frac = frac @exp = exp end
Public Instance Methods
abs()
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 38 def abs self.class.new('', int, frac, exp) end
apply_exp()
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 28 def apply_exp new_int, new_frac = if exp > 0 shift_right(exp) else shift_left(exp.abs) end self.class.new(sign, new_int || '', new_frac || '', 0) end
frac_val()
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 23 def frac_val # remove leading zeroes frac.sub(/\A0*/, '') end
int_val()
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 19 def int_val int.to_i end
strip()
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 50 def strip self.class.new(sign, int, frac.sub(/0+\z/, ''), exp) end
to_s()
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 42 def to_s ''.tap do |result| result << "#{sign}#{int}" result << ".#{frac}" unless frac.empty? result << "e#{exp}" if exp != 0 end end
to_val()
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 54 def to_val str = to_s if str.include?('.') str.to_f else str.to_i * (10 ** exp) end end
Private Instance Methods
shift_left(n)
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 81 def shift_left(n) return [int, frac] if exp == 0 new_frac = '' if n - int.length > 0 new_frac << '0' * (n - int.length) end new_frac << int[0...n] new_frac << frac new_int = int[n..-1] new_int = !new_int || new_int.empty? ? '0' : new_int [new_int, new_frac] end
shift_right(n)
click to toggle source
# File lib/cldr-plurals/ruby-runtime/str_num.rb, line 66 def shift_right(n) return [int, frac] if exp == 0 new_int = "#{int}#{frac[0...n]}" if n - frac.length > 0 new_int << '0' * (n - frac.length) end new_frac = frac[n..-1] new_frac = (!new_frac || new_frac.empty?) && !frac.empty? ? '0' : new_frac [new_int, new_frac] end