exact-mode added by dieggsy on Thu Oct 11 21:39:53 2018

(import (chicken string))

(define (repeating->exact n)
  (let* ((dot (substring-index "." n))
         (r (substring-index "r" n))
         (p1 (- r dot 1))
         (p2 (+ p1 (- (string-length n) r 1)))
         (s1 (substring n 0 dot))
         (s2 (substring n (+ dot 1) r))
         (s3 (substring n (+ r 1) (string-length n)))
         (num1 (or (string->number (string-append s1 s2)) 0))
         (num2 (string->number (string-append s1 s2 s3))))
    (/ (- num2 num1)
       (- (expt 10 p2) (expt 10 p1)))))

(define exact-mode? (make-parameter #f))

(exact-mode? #t)

(define (##sys#string->number str #!optional (radix 10) exactness)
  (if (exact-mode?)
      (if (substring-index "r" str)
          (repeating->exact str)
          (string->number (string-append "#e" str)))
      (string->number str)))