(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)))