# Class: RDF::Literal::Decimal

Inherits:
Numeric
show all
Defined in:
vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb

## Overview

A decimal literal.

Examples:

Arithmetic with decimal literals

``````RDF::Literal(BigDecimal('1.0')) + 0.5   #=> RDF::Literal(BigDecimal('1.5'))
RDF::Literal(BigDecimal('1.0')) - 0.5   #=> RDF::Literal(BigDecimal('0.5'))
RDF::Literal(BigDecimal('1.0')) * 0.5   #=> RDF::Literal(BigDecimal('0.5'))
RDF::Literal(BigDecimal('1.0')) / 0.5   #=> RDF::Literal(BigDecimal('2.0'))``````

Since:

• 0.2.1

Integer

## Constant Summary collapse

DATATYPE =

Since:

• 0.2.1

`RDF::URI("http://www.w3.org/2001/XMLSchema#decimal")`
GRAMMAR =

Since:

• 0.2.1

`/^[\+\-]?\d+(\.\d*)?\$/.freeze`

### Constants included from SPARQL::Algebra::Expression

SPARQL::Algebra::Expression::PATTERN_PARENTS

### Constants included from Util::Logger

Util::Logger::IOWrapper

## Instance Method Summary collapse

• Returns the absolute value of `self`.

• Converts this literal into its canonical lexical representation.

• Returns the smallest integer greater than or equal to `self`.

• Returns the largest integer less than or equal to `self`.

• constructor

A new instance of Decimal.

• Returns `self` if the value is not zero, `nil` otherwise.

• Returns the number with no fractional part that is closest to the argument.

• Returns the value as a string.

• Returns `true` if the value is zero.

## Constructor Details

### #initialize(value, datatype: nil, lexical: nil, **options) ⇒ Decimal

Returns a new instance of Decimal.

Parameters:

• value (String, BidDecimal, Numeric)
• value (Object)
• direction (Symbol)

(nil) Initial text direction.

• language (Symbol)

(nil) Language is downcased to ensure proper matching

• lexical (String) (defaults to: nil)

(nil) Supplied lexical representation of this literal, otherwise it comes from transforming `value` to a string form..

• datatype (URI) (defaults to: nil)

(nil)

• validate (Boolean)

(false)

• canonicalize (Boolean)

(false)

Since:

• 0.2.1

 ``` 20 21 22 23 24 25 26 27 28 29 30 31 32``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 20 def initialize(value, datatype: nil, lexical: nil, **options) @datatype = RDF::URI(datatype || self.class.const_get(:DATATYPE)) @string = lexical || (value if value.is_a?(String)) @object = case when value.is_a?(::BigDecimal) then value when value.is_a?(::Float) then BigDecimal(value.to_s) when value.is_a?(::Numeric) then BigDecimal(value) else value = value.to_s value += "0" if value.end_with?(".") BigDecimal(value) rescue BigDecimal(0) end end```

## Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class RDF::Literal

## Instance Method Details

### #abs ⇒ RDF::Literal

Returns the absolute value of `self`.

From the XQuery function fn:abs.

Returns:

Since:

• 0.2.3

 ``` 62 63 64``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 62 def abs (d = to_d) && d > 0 ? self : RDF::Literal(d.abs) end```

### #canonicalize! ⇒ RDF::Literal

Converts this literal into its canonical lexical representation.

Returns:

• `self`

Since:

• 0.2.1

 ``` 39 40 41 42 43 44 45 46 47 48 49 50 51 52``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 39 def canonicalize! # Can't use simple %f transformation due to special requirements from # N3 tests in representation @string = begin i, f = @object.to_s('F').split('.') i.sub!(/^\+?0+(\d)\$/, '\1') # remove the optional leading '+' sign and any extra leading zeroes f = f[0, 16] # truncate the fractional part after 15 decimal places f.sub!(/0*\$/, '') # remove any trailing zeroes f = '0' if f.empty? # ...but there must be a digit to the right of the decimal point "#{i}.#{f}" end @object = BigDecimal(@string) unless @object.nil? self end```

### #ceil ⇒ RDF::Literal::Integer

Returns the smallest integer greater than or equal to `self`.

From the XQuery function fn:ceil.

Examples:

``RDF::Literal(1).ceil            #=> RDF::Literal(1)``

Returns:

Since:

• 0.2.1

 ``` 93 94 95``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 93 def ceil RDF::Literal::Integer.new(to_d.ceil) end```

### #floor ⇒ RDF::Literal::Integer

Returns the largest integer less than or equal to `self`.

From the XQuery function fn:floor.

Examples:

``RDF::Literal(1).floor            #=> RDF::Literal(1)``

Returns:

Since:

• 0.2.1

 ``` 107 108 109``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 107 def floor RDF::Literal::Integer.new(to_d.floor) end```

### #nonzero? ⇒ Boolean

Returns `self` if the value is not zero, `nil` otherwise.

Returns:

Since:

• 0.2.3

 ``` 125 126 127``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 125 def nonzero? to_d.nonzero? ? self : nil end```

### #round ⇒ RDF::Literal::Decimal

Returns the number with no fractional part that is closest to the argument. If there are two such numbers, then the one that is closest to positive infinity is returned. An error is raised if arg is not a numeric value.

From the XQuery function fn:round.

Returns:

Since:

• 0.2.1

 ``` 73 74 75 76 77 78 79 80 81``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 73 def round rounded = to_d.round(half: (to_d < 0 ? :down : :up)) if rounded == -0.0 # to avoid -0.0 self.class.new(0.0) else self.class.new(rounded) end end```

### #to_s ⇒ String

Returns the value as a string.

Returns:

• BigDecimal#to_s

Since:

• 0.2.1

 ``` 134 135 136``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 134 def to_s @string || @object.to_s('F') end```

### #zero? ⇒ Boolean

Returns `true` if the value is zero.

Returns:

Since:

• 0.2.3

 ``` 116 117 118``` ```# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-f5dd4e8b01e6/lib/rdf/model/literal/decimal.rb', line 116 def zero? to_d.zero? end```