fixes #21847; let parseFloat behave like strtod (#21854)

(cherry picked from commit f22e5067c5)
This commit is contained in:
ringabout
2023-05-17 06:21:34 +08:00
committed by narimiran
parent 1355083708
commit 2410580d59
2 changed files with 11 additions and 3 deletions

View File

@@ -155,7 +155,9 @@ proc nimParseBiggestFloat(s: string, number: var BiggestFloat,
# if exponent greater than can be represented: +/- zero or infinity
if absExponent > 999:
if expNegative:
if integer == 0:
number = 0.0
elif expNegative:
number = 0.0*sign
else:
number = Inf*sign

View File

@@ -56,8 +56,14 @@ doAssert 0.9999999999999999 == ".9999999999999999".parseFloat
# bug #18400
var s = [-13.888888'f32]
assert $s[0] == "-13.888888"
doAssert $s[0] == "-13.888888"
var x = 1.23456789012345'f32
assert $x == "1.2345679"
doAssert $x == "1.2345679"
# bug #21847
doAssert parseFloat"0e+42" == 0.0
doAssert parseFloat"0e+42949672969" == 0.0
doAssert parseFloat"0e+42949672970" == 0.0
doAssert parseFloat"0e+42949623223346323563272970" == 0.0
echo("passed all tests.")