6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# File 'lib/stellar/price.rb', line 6
def self.from(number)
number = BigDecimal(number, 0) if number.is_a?(String)
number = number.to_r if number.respond_to?(:to_r)
raise ArgumentError, "Couldn't convert #{number.class} to rational number" unless number.is_a?(Rational)
best_r = number.rationalize(1.0e-7)
if best_r.numerator > MAX_PRECISION || best_r.denominator > MAX_PRECISION
raise ArgumentError, "Couldn't find valid price approximation for #{number}"
end
new(n: best_r.numerator, d: best_r.denominator)
end
|