class CoinDecimal
Constants
- BITCOIN_PRECISION
- MAX_PRECISION
Attributes
precision[R]
value[R]
Public Class Methods
ensure_integer(value, precision = BITCOIN_PRECISION)
click to toggle source
# File lib/coin_decimal.rb, line 27 def self.ensure_integer(value, precision = BITCOIN_PRECISION) if value.is_a?(Integer) value elsif value.is_a?(BigDecimal) (value * (10 ** precision)).to_i elsif value.is_a?(String) (value.to_d * (10 ** precision)).to_i else raise(ArgumentError, "Value must be Integer, BigDecimal or String.") end end
new(value, precision = BITCOIN_PRECISION)
click to toggle source
# File lib/coin_decimal.rb, line 13 def initialize(value, precision = BITCOIN_PRECISION) raise(ArgumentError, "Precision must be an Integer.") unless precision.is_a?(Integer) raise(ArgumentError, "Precision must be less than or equal to #{MAX_PRECISION}.") if precision > MAX_PRECISION raise(ArgumentError, "Precision can't be negative.") if precision < 0 @precision = precision raise(ArgumentError, "Value can't be nil.") if value.nil? @value = CoinDecimal.ensure_integer(value, precision) end
Public Instance Methods
+(addend)
click to toggle source
# File lib/coin_decimal.rb, line 39 def +(addend) sum = value + addend.value CoinDecimal.new(sum, precision) end
-(subtrahend)
click to toggle source
# File lib/coin_decimal.rb, line 44 def -(subtrahend) difference = value - subtrahend.value CoinDecimal.new(difference, precision) end
formatted(short: true)
click to toggle source
# File lib/coin_decimal.rb, line 49 def formatted(short: true) result = string if short result = result.gsub(/0+$/, "") result = "#{result}0" if result.end_with?(".") end result end
Also aliased as: to_s
negative?()
click to toggle source
# File lib/coin_decimal.rb, line 70 def negative? value < 0 end
positive?()
click to toggle source
# File lib/coin_decimal.rb, line 66 def positive? value > 0 end
to_d()
click to toggle source
# File lib/coin_decimal.rb, line 62 def to_d formatted.to_d end
Private Instance Methods
string()
click to toggle source
# File lib/coin_decimal.rb, line 76 def string result = value.abs.to_s result = \ if result.length > precision result.insert(-(precision + 1), ".") else "0.#{result.rjust(precision, "0")}" end negative? ? "-#{result}" : result end