Fixed bug in 'string.format' with option '%f'

As an example, 'print(string.format("%.99f", 1e70))' may have a
lot of garbage after the number.

The old test to ensure that 'string.format("%.99f", n)' was not too
large, 'fabs(n) < 1e100', assumes that the number will fit in the 99
bytes; but the 99 is not the space for the number, it is the added
extra zeros.  The option worked for smaller numbers because of the
extra space added to MAX_ITEM.
This commit is contained in:
Roberto Ierusalimschy
2019-07-23 12:46:33 -03:00
parent 9e6807c3c9
commit 7f5c31cdca
2 changed files with 12 additions and 8 deletions

View File

@@ -255,6 +255,12 @@ do -- longest number that can be formatted
local s = string.format('%.99f', -(10^i))
assert(string.len(s) >= i + 101)
assert(tonumber(s) == -(10^i))
-- limit for floats
assert(10^38 < math.huge)
local s = string.format('%.99f', -(10^38))
assert(string.len(s) >= 38 + 101)
assert(tonumber(s) == -(10^38))
end