#
# convert_decimal_to_rational(s)
# ------------------------------
# Converts a decimal number (given as a string) into an exact Rational p/q.
#
# Why Ruby makes this easy:
# • Ruby has a built‑in Rational class.
# • Rational() can convert strings exactly.
# • It avoids floating‑point inaccuracies by parsing the string directly.
#
# Algorithm (handled internally by Rational()):
# 1. Parse the string.
# 2. Convert integer and fractional parts into numerator/denominator.
# 3. Reduce using gcd.
#
def convert_decimal_to_rational(s)
# Rational(s) interprets the string exactly, avoiding float rounding issues.
Rational(s)
end
def main
values = [
"3.5", "12.75", "0.125", "100.001",
"7", "42.0", "0.333", "5.2"
]
values.each do |v|
r = convert_decimal_to_rational(v)
puts "#{v} -> #{r.numerator}/#{r.denominator}"
end
end
main
=begin
run:
3.5 -> 7/2
12.75 -> 51/4
0.125 -> 1/8
100.001 -> 100001/1000
7 -> 7/1
42.0 -> 42/1
0.333 -> 333/1000
5.2 -> 26/5
=end