diff options
-rw-r--r-- | lib/pure/strformat.nim | 7 | ||||
-rw-r--r-- | tests/stdlib/tstrformat.nim | 8 |
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/pure/strformat.nim b/lib/pure/strformat.nim index 3e7b043ce..36404cdf7 100644 --- a/lib/pure/strformat.nim +++ b/lib/pure/strformat.nim @@ -527,8 +527,13 @@ proc format*(value: SomeFloat; specifier: string; res: var string) = var sign = false if value >= 0.0: if spec.sign != '-': - f = spec.sign & f sign = true + if value == 0.0: + if 1.0 / value == Inf: + # only insert the sign if value != negZero + f.insert($spec.sign, 0) + else: + f.insert($spec.sign, 0) else: sign = true diff --git a/tests/stdlib/tstrformat.nim b/tests/stdlib/tstrformat.nim index 919158ac4..db76899d4 100644 --- a/tests/stdlib/tstrformat.nim +++ b/tests/stdlib/tstrformat.nim @@ -46,3 +46,11 @@ doAssert fmt"{-1.5:0>8}" == "0000-1.5" # even that does not work for negative fl doAssert fmt"{-1.5:08}" == "-00001.5" # works doAssert fmt"{1.5:+08}" == "+00001.5" # works doAssert fmt"{1.5: 08}" == " 00001.5" # works + +# only add explicitly requested sign if value != -0.0 (neg zero) +doAssert fmt"{-0.0:g}" == "-0" +doassert fmt"{-0.0:+g}" == "-0" +doassert fmt"{-0.0: g}" == "-0" +doAssert fmt"{0.0:g}" == "0" +doAssert fmt"{0.0:+g}" == "+0" +doAssert fmt"{0.0: g}" == " 0" |