Class XSD::XSDDouble
In: lib/xsd/datatypes.rb
Parent: XSDAnySimpleType

Ruby‘s Float is double-precision 64-bit floating point value.

Methods

_to_s   new   screen_data  

Included Modules

FloatConstants

Constants

Type = QName.new(Namespace, DoubleLiteral)

Public Class methods

[Source]

     # File lib/xsd/datatypes.rb, line 372
372:   def initialize(value = nil)
373:     init(Type, value)
374:   end

Private Instance methods

[Source]

     # File lib/xsd/datatypes.rb, line 408
408:   def _to_s
409:     if @data.nan?
410:       'NaN'
411:     elsif @data.infinite? == 1
412:       'INF'
413:     elsif @data.infinite? == -1
414:       '-INF'
415:     else
416:       sign = (1 / @data > 0.0) ? '+' : '-'
417:       sign + sprintf("%.16g", @data.abs).sub(/[eE]([+-])?0+/) { 'e' + $1 }
418:     end
419:   end

[Source]

     # File lib/xsd/datatypes.rb, line 378
378:   def screen_data(value)
379:     # "NaN".to_f => 0 in some environment.  libc?
380:     if value.is_a?(Float)
381:       return value
382:     end
383:     str = value.to_s.strip
384:     if str == 'NaN'
385:       NaN
386:     elsif str == 'INF'
387:       POSITIVE_INF
388:     elsif str == '-INF'
389:       NEGATIVE_INF
390:     else
391:       begin
392:         return Float(str)
393:       rescue ArgumentError
394:         # '1.4e' cannot be parsed on some architecture.
395:         if /e\z/i =~ str
396:           begin
397:             return Float(str + '0')
398:           rescue ArgumentError
399:             raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
400:           end
401:         else
402:           raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
403:         end
404:       end
405:     end
406:   end

[Validate]