diff options
author | skilchen <skilchen@users.noreply.github.com> | 2018-06-02 04:23:50 +0200 |
---|---|---|
committer | Varriount <Varriount@users.noreply.github.com> | 2018-06-01 22:23:50 -0400 |
commit | 07ff9940f4a990b57cfaa3ad274c7bcff46356ff (patch) | |
tree | c9c0bd539ab5c1450cfc55289bc097ab970c0520 /lib/pure/strformat.nim | |
parent | b4626a220b2de0fee7360672915332c402bf9dc7 (diff) | |
download | Nim-07ff9940f4a990b57cfaa3ad274c7bcff46356ff.tar.gz |
fix strformat zeropadding for floats (#7934)
Diffstat (limited to 'lib/pure/strformat.nim')
-rw-r--r-- | lib/pure/strformat.nim | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/pure/strformat.nim b/lib/pure/strformat.nim index a8b128460..12a102c9f 100644 --- a/lib/pure/strformat.nim +++ b/lib/pure/strformat.nim @@ -524,8 +524,26 @@ proc format*(value: SomeFloat; specifier: string; res: var string) = " of 'e', 'E', 'f', 'F', 'g', 'G' but got: " & spec.typ) var f = formatBiggestFloat(value, fmode, spec.precision) - if value >= 0.0 and spec.sign != '-': - f = spec.sign & f + var sign = false + if value >= 0.0: + if spec.sign != '-': + f = spec.sign & f + sign = true + else: + sign = true + + if spec.padWithZero: + var sign_str = "" + if sign: + sign_str = $f[0] + f = f[1..^1] + + let toFill = spec.minimumWidth - f.len - ord(sign) + if toFill > 0: + f = repeat('0', toFill) & f + if sign: + f = sign_str & f + # the default for numbers is right-alignment: let align = if spec.align == '\0': '>' else: spec.align let result = alignString(f, spec.minimumWidth, |