module SQLite3ExtendFunction::Functions::Trunc

SQLite3ExtendFunction::Functions::Trunc

Public Class Methods

call(v, s = 0) click to toggle source

@param [Integer, Float] v @param [Integer] s @return [Integer, Float] @raise [SQLite3::SQLException]

# File lib/sqlite3_extend_function/functions/trunc.rb, line 12
def call(v, s = 0)
  return if v.nil?
  raise ArgumentError if s.is_a?(Integer)

  dec = BigDecimal(s.zero? ? '1.0' : (1.0 / (10**s)).to_s)
  result = (v / dec).to_i * dec
  result.to_i == result ? result.to_i : result.to_f
rescue ArgumentError
  raise SQLite3::SQLException, 'invalid input syntax for type double precision'
end