Why is using a set CFrame not setting the block to the right position?

I pass a cFrame from the client, to the server, and then on the server create a block and give it the same cFrame the client passed. Yet, the cframe the client passed is not the same as the one the server does to the block. This then breaks my other code which I use to get the orientation. Why is this happening? There’s no reason for cFrame and ConvertedBlock.CFrame to NOT be the same number?

print("CFrame passed from client", cFrame)
local x, y, z = require(Shared.Helpers).RotationFix(cFrame)
print("Should be", x, y, z)
print("Converted block CFrame", ConvertedBlock.CFrame)
local x, y, z = require(Shared.Helpers).RotationFix(ConvertedBlock.CFrame)
print("Was actually", x, y, z)
local ConvertedBlock = self.Handler:ConvertToBlock(NewBlock, cFrame)--(NewBlock, cFrame) -- Convert block to part based

function PlotManager:ConvertToBlock(block, position, yRot, rotationCFrame)
	local Root = block:FindFirstChild("Root")
	if not Root then return end
	
	block.PrimaryPart = Root
	
	local NewCFrame = position
	
	block:PivotTo(NewCFrame)
	
	Root.Name = block.Name
	
	Root:SetAttribute("Id", block:GetAttribute("Id"))
	
	return Root
end

Those CFrames are pretty much the same if you ignore some rounding error which would have little effect. XYZ rotation doesn’t actually have enough data to describe rotation, and you can’t rely on it to always be predictable.

Why do they return 2 different ToOrientation values then??

I NEED them to both return the exact same values. If they are the same CFrame’s, they SHOULD have the same orientation no?

--// Round to nearest number
function Helpers.RoundTo(number, nearest)
	return math.floor(number / nearest + 0.5) * nearest
end

function Helpers.RotationFix(cFrame)
	local X, Y, Z = cFrame:ToOrientation()
	X = math.deg(X)
	Y = math.deg(Y)
	Z = math.deg(Z)
	
	X = Helpers.RoundTo(X, 5)
	Y = Helpers.RoundTo(Y, 5)
	Z = Helpers.RoundTo(Z, 5)
	
	return X, Y, Z
end