mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
dump[2]: avoid misleading rounding of numbers
This commit is contained in:
parent
f4285a59ac
commit
98b2edeb11
2 changed files with 16 additions and 1 deletions
|
@ -7,7 +7,15 @@ local math = math
|
|||
local function basic_dump(o)
|
||||
local tp = type(o)
|
||||
if tp == "number" then
|
||||
return tostring(o)
|
||||
local s = tostring(o)
|
||||
if tonumber(s) == o then
|
||||
return s
|
||||
end
|
||||
-- Prefer an exact representation over a compact representation.
|
||||
-- e.g. basic_dump(0.3) == "0.3",
|
||||
-- but basic_dump(0.1 + 0.2) == "0.30000000000000004"
|
||||
-- so the user can see that 0.1 + 0.2 ~= 0.3
|
||||
return string.format("%.17g", o)
|
||||
elseif tp == "string" then
|
||||
return string.format("%q", o)
|
||||
elseif tp == "boolean" then
|
||||
|
|
|
@ -230,3 +230,10 @@ describe("math", function()
|
|||
assert.equal(0, math.round(-0.49999999999999994))
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("dump", function()
|
||||
it("avoids misleading rounding of floating point numbers", function()
|
||||
assert.equal("0.3", dump(0.3))
|
||||
assert.equal("0.30000000000000004", dump(0.1 + 0.2))
|
||||
end)
|
||||
end)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue