class XSD::XSDDecimal
Constants
- Type
Public Class Methods
new(value = nil)
click to toggle source
# File lib/xsd/datatypes.rb, line 246 def initialize(value = nil) init(Type, value) end
Public Instance Methods
nonzero?()
click to toggle source
# File lib/xsd/datatypes.rb, line 250 def nonzero? (@number != '0') end
Private Instance Methods
_set(data)
click to toggle source
# File lib/xsd/datatypes.rb, line 287 def _set(data) if data.nil? @sign = @point = @number = @data = nil return end @sign, @point, @number = data @data = _to_s @data.freeze end
_to_s()
click to toggle source
0.0 -> 0; right?
# File lib/xsd/datatypes.rb, line 298 def _to_s str = @number.dup if @point.nonzero? str[@number.size + @point, 0] = '.' end @sign + str end
screen_data(d)
click to toggle source
# File lib/xsd/datatypes.rb, line 256 def screen_data(d) if d.is_a?(String) # Integer("00012") => 10 in Ruby. d.sub!(/^([+\-]?)0*(?=\d)/, "\\1") end screen_data_str(d) end
screen_data_str(str)
click to toggle source
# File lib/xsd/datatypes.rb, line 264 def screen_data_str(str) /^([+\-]?)(\d*)(?:\.(\d*)?)?$/ =~ str.to_s.strip unless Regexp.last_match raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.") end sign = $1 || '+' int_part = $2 frac_part = $3 int_part = '0' if int_part.empty? frac_part = frac_part ? frac_part.sub(/0+$/, '') : '' point = - frac_part.size number = int_part + frac_part # normalize if sign == '+' sign = '' elsif sign == '-' if number == '0' sign = '' end end [sign, point, number] end