From 2885270d584f2f117b052084fb872d9130f16b16 Mon Sep 17 00:00:00 2001 From: Dylan Fiedler Date: Mon, 4 Nov 2024 18:12:08 -0600 Subject: [PATCH 1/2] fix(encode_number): support up to 20 significant digits when encoding decmials, return string value of integers As mentioned in https://github.com/rxi/json.lua/pull/42#issuecomment-1605913581 - Lua 5.3+ supports 64 bit integers. This change modifies the string encoding of numbers to align with those changes. --- json.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/json.lua b/json.lua index 711ef78..f1f3cab 100644 --- a/json.lua +++ b/json.lua @@ -108,7 +108,12 @@ local function encode_number(val) if val ~= val or val <= -math.huge or val >= math.huge then error("unexpected number value '" .. tostring(val) .. "'") end - return string.format("%.14g", val) + -- Handle integer values separately to avoid floating-point conversion + if math.type(val) == "integer" then + return string.format("%d", val) -- Format as an integer + else + -- Use 20 significant digits for non-integer numbers + return string.format("%.20g", val) end From c48b134d0121fa1c202654538764dd7bdb5f6bed Mon Sep 17 00:00:00 2001 From: Dylan Fiedler Date: Mon, 4 Nov 2024 18:12:58 -0600 Subject: [PATCH 2/2] chore(lint): fix spacing --- json.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json.lua b/json.lua index f1f3cab..6d1823d 100644 --- a/json.lua +++ b/json.lua @@ -113,7 +113,7 @@ local function encode_number(val) return string.format("%d", val) -- Format as an integer else -- Use 20 significant digits for non-integer numbers - return string.format("%.20g", val) + return string.format("%.20g", val) end