Module: VectorNumber::Converting

Included in:
VectorNumber
Defined in:
lib/vector_number/converting.rb

Overview

Methods for converting to different number classes.

Instance Method Summary collapse

Instance Method Details

#imaginaryInteger, ... Also known as: imag

Return imaginary part of the number.

Examples:

VectorNumber[23, "a"].imaginary # => 0
VectorNumber["a", Complex(1, 2r)].imag # => (2/1)

Returns:

  • (Integer, Float, Rational, BigDecimal)

Since:

  • 0.1.0



26
# File 'lib/vector_number/converting.rb', line 26

def imaginary = @data[I]

#realInteger, ...

Return real part of the number.

Examples:

VectorNumber[23, "a"].real # => 23
VectorNumber["a"].real # => 0

Returns:

  • (Integer, Float, Rational, BigDecimal)

Since:

  • 0.1.0



15
# File 'lib/vector_number/converting.rb', line 15

def real = @data[R]

#to_cComplex

Return value as a Complex if only real and/or imaginary parts are non-zero.

Examples:

VectorNumber[13.5].to_c # => (13.5+0i)
VectorNumber[13r/12].to_c # => ((13/12)+0i)
VectorNumber[2, 2i].to_c # => (2+2i)
VectorNumber[2, :i].to_c # RangeError

Complex(VectorNumber[2]) # => (2+0i)
Complex(VectorNumber[2, "i"]) # RangeError

Returns:

  • (Complex)

Raises:

  • (RangeError)

    if any non-real, non-imaginary part is non-zero

Since:

  • 0.1.0



142
143
144
# File 'lib/vector_number/converting.rb', line 142

def to_c
  numeric?(2) ? Complex(real, imaginary) : raise_convert_error(Complex)
end

#to_d(ndigits = nil) ⇒ BigDecimal

Return value as a BigDecimal if only real part is non-zero.

Examples:

VectorNumber[13.5].to_d # => 0.135e2
VectorNumber[13r/12].to_d # ArgumentError
VectorNumber[13r/12].to_d(5) # => 0.10833e1
VectorNumber[2, 2i].to_d # RangeError
VectorNumber[2, :i].to_d # RangeError

# This does't work without NumericRefinements:
BigDecimal(VectorNumber[2]) # TypeError
# #to_s can be used as a workaround if refinements aren't used:
BigDecimal(VectorNumber[2].to_s) # => 0.2e1
BigDecimal(VectorNumber[2, "i"].to_s) # => ArgumentError

Parameters:

  • ndigits (Integer) (defaults to: nil)

    precision

Returns:

  • (BigDecimal)

Raises:

  • (RangeError)

    if any non-real part is non-zero

  • (NameError)

    if BigDecimal is not defined

See Also:

Since:

  • 0.1.0



116
117
118
119
120
121
122
123
124
125
# File 'lib/vector_number/converting.rb', line 116

def to_d(ndigits = nil)
  if numeric?(1)
    return BigDecimal(real, ndigits) if ndigits
    return BigDecimal(real, Float::DIG) if real.is_a?(Float)

    BigDecimal(real)
  else
    raise_convert_error(BigDecimal)
  end
end

#to_fFloat

Return value as a Float if only real part is non-zero.

Examples:

VectorNumber[13.5].to_f # => 13.5
VectorNumber[13r/12].to_f # => 1.0833333333333333
VectorNumber[2, 2i].to_f # RangeError
VectorNumber[2, :i].to_f # RangeError

Float(VectorNumber[2]) # => 2.0
Float(VectorNumber[2, "i"]) # RangeError

Returns:

  • (Float)

Raises:

  • (RangeError)

    if any non-real part is non-zero

Since:

  • 0.1.0



69
70
71
# File 'lib/vector_number/converting.rb', line 69

def to_f
  numeric?(1) ? real.to_f : raise_convert_error(Float)
end

#to_iInteger Also known as: to_int

Return value as an Integer, truncating it, if only real part is non-zero.

Examples:

VectorNumber[13.5].to_i # => 13
VectorNumber[13r/12].to_int # => 1
[1.1, 2.2, 3.3][VectorNumber[2]] # => 3.3
VectorNumber[2, 2i].to_i # RangeError
VectorNumber[2, :i].to_f # RangeError

Integer(VectorNumber[2]) # => 2
Integer(VectorNumber[2, "i"]) # RangeError

Returns:

  • (Integer)

Raises:

  • (RangeError)

    if any non-real part is non-zero

Since:

  • 0.1.0



47
48
49
# File 'lib/vector_number/converting.rb', line 47

def to_i
  numeric?(1) ? real.to_i : raise_convert_error(Integer)
end

#to_rRational

Return value as a Rational if only real part is non-zero.

Examples:

VectorNumber[13.5].to_r # => (27/2)
VectorNumber[13r/12].to_r # => (13/12)
VectorNumber[2, 2i].to_r # RangeError
VectorNumber[2, :i].to_r # RangeError

Rational(VectorNumber[2]) # => (2/1)
Rational(VectorNumber[2, "i"]) # RangeError

Returns:

  • (Rational)

Raises:

  • (RangeError)

    if any non-real part is non-zero

Since:

  • 0.1.0



88
89
90
# File 'lib/vector_number/converting.rb', line 88

def to_r
  numeric?(1) ? real.to_r : raise_convert_error(Rational)
end