class Qti::V1::Models::Numerics::Precision
Public Class Methods
new(scoring_node)
click to toggle source
Calls superclass method
# File lib/qti/v1/models/numerics/precision.rb, line 8 def initialize(scoring_node) super(scoring_node) end
significant_digits(number_s)
click to toggle source
# File lib/qti/v1/models/numerics/precision.rb, line 42 def self.significant_digits(number_s) sig = 0 zeros = 0 number_s.each_char do |c| next if (sig.zero? && c == '0') || c == '.' if c == '0' zeros += 1 else sig += zeros + 1 zeros = 0 end end # this is not exactly significant digits # trailing zeros are ignored # because gt_node and lte_node don't expect trailing zeros sig end
Public Instance Methods
precision()
click to toggle source
# File lib/qti/v1/models/numerics/precision.rb, line 34 def precision sig = [ Precision.significant_digits(gt_node.content), Precision.significant_digits(lte_node.content) ].max sig - 1 end
scoring_data()
click to toggle source
# File lib/qti/v1/models/numerics/precision.rb, line 12 def scoring_data return unless equal_node && gt_node && lte_node Struct.new( :id, :type, :value, :precision, :precision_type ).new( equal_node.attributes['respident']&.value, 'preciseResponse', value, precision.to_s, 'significantDigits' ) end
value()
click to toggle source
# File lib/qti/v1/models/numerics/precision.rb, line 29 def value fval = equal_node.content.to_f number_with_precision(fval, precision: precision, significant: true) end