mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Fix math.round floating point bug (#14757)
This commit is contained in:
		@@ -240,12 +240,15 @@ function math.factorial(x)
 | 
			
		||||
	return v
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function math.round(x)
 | 
			
		||||
	if x >= 0 then
 | 
			
		||||
		return math.floor(x + 0.5)
 | 
			
		||||
	if x < 0 then
 | 
			
		||||
		local int = math.ceil(x)
 | 
			
		||||
		local frac = x - int
 | 
			
		||||
		return int - ((frac <= -0.5) and 1 or 0)
 | 
			
		||||
	end
 | 
			
		||||
	return math.ceil(x - 0.5)
 | 
			
		||||
	local int = math.floor(x)
 | 
			
		||||
	local frac = x - int
 | 
			
		||||
	return int + ((frac >= 0.5) and 1 or 0)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local formspec_escapes = {
 | 
			
		||||
 
 | 
			
		||||
@@ -176,3 +176,17 @@ describe("formspec_escape", function()
 | 
			
		||||
		assert.equal("\\[Hello\\\\\\[", core.formspec_escape("[Hello\\["))
 | 
			
		||||
	end)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
describe("math", function()
 | 
			
		||||
	it("round()", function()
 | 
			
		||||
		assert.equal(0, math.round(0))
 | 
			
		||||
		assert.equal(10, math.round(10.3))
 | 
			
		||||
		assert.equal(11, math.round(10.5))
 | 
			
		||||
		assert.equal(11, math.round(10.7))
 | 
			
		||||
		assert.equal(-10, math.round(-10.3))
 | 
			
		||||
		assert.equal(-11, math.round(-10.5))
 | 
			
		||||
		assert.equal(-11, math.round(-10.7))
 | 
			
		||||
		assert.equal(0, math.round(0.49999999999999994))
 | 
			
		||||
		assert.equal(0, math.round(-0.49999999999999994))
 | 
			
		||||
	end)
 | 
			
		||||
end)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user