summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--module/ice-9/format.scm4
-rw-r--r--test-suite/tests/format.test8
2 files changed, 9 insertions, 3 deletions
diff --git a/module/ice-9/format.scm b/module/ice-9/format.scm
index 48d9c0c84..ee7cba910 100644
--- a/module/ice-9/format.scm
+++ b/module/ice-9/format.scm
@@ -1359,10 +1359,10 @@
(else
(if (> left-zeros 0)
(if (<= left-zeros shift) ; shift always > 0 here
- (format:fn-shiftleft shift) ; shift out 0s
(begin
(format:fn-shiftleft left-zeros)
- (set! format:fn-dot (- shift left-zeros))))
+ (set! format:fn-dot (- shift left-zeros)))
+ (format:fn-shiftleft shift)) ; shift out 0s
(set! format:fn-dot (+ format:fn-dot shift))))))))
(let ((negexp ; expon format m.nnnEee
diff --git a/test-suite/tests/format.test b/test-suite/tests/format.test
index b9aa7a854..f32d99568 100644
--- a/test-suite/tests/format.test
+++ b/test-suite/tests/format.test
@@ -121,7 +121,13 @@
;; in guile prior to 1.6.9 and 1.8.1, leading zeros were incorrectly
;; stripped, moving the decimal point and giving "25.0" here
(pass-if "string 02.5"
- (string=? "2.5" (format #f "~f" "02.5"))))
+ (string=? "2.5" (format #f "~f" "02.5")))
+
+ (pass-if "scale with few leading zeros"
+ (string=? "1.23" (format #f "~,,3f" "0.00123")))
+
+ (pass-if "scale with many leading zeros"
+ (string=? "0.0123" (format #f "~,,1f" "0.00123"))))
;;;
;;; ~h