Yes. Common Lisp is an example of a language that can represent rationals exactly and do arithmetic on them. You can avoid floating-point precision loss by using this method. But there are drawbacks:
1) The numerator and denominator will often turn into bignums as a calculation progresses, consuming ever-larger amounts of space and time, and
2) This won't help you with any calculation involving irrationals, except to prevent your initial imprecision from growing larger.