adjust flonum printing to be more like %g

Adjust the choice between exponential and not.

Closes racket/racket#3195

original commit: 3a71e6fb6240d1c9e206064a613835c6eea871aa
This commit is contained in:
Matthew Flatt 2020-05-19 21:18:24 -06:00
parent a820e425d6
commit c5ee80bf0d
2 changed files with 10 additions and 2 deletions

View File

@ -714,7 +714,7 @@
(equal? (number->string 1.1665795231290236e-302) "1.1665795231290236e-302")
; fp printing algorithm always rounds up on ties
(equal? (number->string 3.6954879760742188e-6) "3.6954879760742188e-6")
(equal? (number->string 5.629499534213123e14) "5.629499534213123e+14")
(equal? (number->string 5.629499534213123e14) "562949953421312.3")
)
(mat string->number

View File

@ -1058,7 +1058,15 @@ floating point returns with (1 0 -1 ...).
(if (fx< s 0)
(write-char #\- p)
(when force-sign (write-char #\+ p)))
(if (or (fx> r 10) (fx< -4 e 10))
(if (or (fx> r 10) (cond
[(fx< e -4) #f]
[(fx< e 14) #t]
[else
(let ([digits (let loop ([ls ls] [digits 0])
(if (fx< (car ls) 0)
digits
(loop (cdr ls) (fx+ digits 1))))])
(fx< (fx- e digits) 3))]))
(free-format e ls p)
(free-format-exponential e ls r p))))
(cond